使用Orca从命令行编辑msi?

时间:2009-05-20 08:35:43

标签: visual-studio-2008 windows-installer icons orca

我正在使用Visual Studio 2008并为我的应用程序创建了一个安装项目。该应用程序具有高分辨率图标(适用于Vista)。 Visual Studio中存在一个错误,安装程序会创建一个带有低分辨率图标的桌面快捷方式。

我在Microsoft Connect(https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258)中记录了这个错误,最后得到了一个答案,即使用Orca编辑msi文件并替换图标。解决方案很好。

现在我想自动化该过程,因此我可以将其包含在我的构建脚本中。有没有办法做到这一点?

5 个答案:

答案 0 :(得分:37)

我发现的最简单的解决方案可能是在Orca中创建一个新的“Transform”,然后将转换应用为我的构建后步骤的一部分。

1)使用ORCA打开MSI文件进行编辑。 2)点击“新变换” 3)使用Orca编辑器对MSI表进行所有适用的更改。 4)单击“生成变换”,然后保存文件。 5)编辑构建事件以在构建后步骤中执行msitran。像这样...

msitran -a(转换文件的路径)(MSI文件的路径)

有关MSITran.exe的更多信息,请访问以下位置... MSITran

一旦安装程序构建完成,这将自动将您的编辑应用于MSI文件,从而无需自定义VBScript。

答案 1 :(得分:11)

您可以编写VBS,JS(使用cscript,内置于每个Windows)来修改MSI,语法几乎就像SQL一样。 Here is a MSDN page that shows various examples.

答案 2 :(得分:7)

我也必须这样做 - 这是我的VBScript文件(如果它对任何人都有用)......

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

此脚本使用单个图标替换MSI数据库中的所有快捷方式图标 - 如果您需要有选择性,那么您还有更多工作要做。

答案 3 :(得分:2)

您可以使用perl脚本修改安装程序msi包。您可以使用Win32 OLE。使用Win32::OLE->new API打开MSI。打开MSI数据库并执行SQL查询以进行更新。

这个perl脚本可以在构建中使用。

link可能会帮助您编写所需的内容。

答案 4 :(得分:2)

由于您习惯使用Orca,只需使用Orca将修改保存为转换文件,然后在设置项目的后期构建事件中将其与“msitran”一起应用。
我在一个安装项目中使用它,效果很好。