Use Orca to edit msi from command line?

丶灬走出姿态 提交于 2019-12-17 17:42:06

问题


I'm using Visual Studio 2008 and have created a setup project for my application. The application has a high-resolution icon (for Vista). There's a bug in Visual Studio, and the installer creates a desktop shortcut with a low resolution icon.

I logged this bug in Microsoft Connect (https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258) and finally got an answer, which is to use Orca to edit the msi file and replace the icon. That solutions works fine.

Now I want to automate that process, so I can include it in my build script. Is there a way to do that?


回答1:


You can write VBS, JS (using cscript, which is built in with every Windows) to modify the MSI, the syntax is pretty much SQL like. Here is a MSDN page that shows various examples.




回答2:


Possibly the easiest solution that I found for this was to create a new "Transform" inside of Orca, and then to apply the transform as a part of my post-build steps.

1) Open the MSI file using ORCA for editing. 2) Click on "New transform" 3) Make all of the applicable changes to your MSI tables using the Orca editor. 4) Click on "Generate transform", and save the file. 5) Edit your build events to execute msitran during the post-build step. like this...

msitran -a (path to transform file) (path to MSI file)

More information about MSITran.exe can be found at the following location... MSITran

This will automatically apply your edits to the MSI file once your installer build has completed, eliminating the need for custom VBScript.




回答3:


I just had to do this too - here is my VBScript file (in case it's useful to anyone)...

Dim msiInstaller
Dim msiDatabase
Dim msiView
Dim msiRecord

Dim pathToMsiFile
Dim pathToIconFile

If WScript.Arguments.Count <> 2 Then
    WScript.Echo "Usage:" & vbCrLf & "  " & WScript.ScriptName & " <path-to-msi> <path-to-icon>"
    WScript.Quit
End If

Dim pathToMsi, pathToIcon
pathToMsi = WScript.Arguments(0)
pathToIcon = WScript.Arguments(1)

Set msiInstaller = CreateObject("WindowsInstaller.Installer")

Set msiRecord = msiInstaller.CreateRecord(1)
msiRecord.SetStream 1, pathToIcon

Set msiDatabase = msiInstaller.OpenDatabase(pathToMsi, 1)
Set msiView = msiDatabase.OpenView("UPDATE Icon SET Data = ? WHERE Name <> ''")
msiView.Execute msiRecord

msiDatabase.Commit

This script replaces all shortcut icons in the MSI database with a single icon - if you need to be selective then you have some more work to do.




回答4:


You can use perl script to modify the installer msi package. You can use Win32 OLE for this. Open the MSI using Win32::OLE->new API. Open the MSI database and execute the SQL queries to do the update.

This perl script can be used in builds.

This link might help you to write the required one.




回答5:


Since you're used to work with Orca, just save the modifications as a transform file using Orca and then applying it with 'msitran' in the post build event of your setup project.
I'm using this in a setup project and it works just great.



来源:https://stackoverflow.com/questions/886842/use-orca-to-edit-msi-from-command-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!