20

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

我在Microsoft Connect(https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258)中记录了这个bug,终于得到了答案,就是使用Orca来编辑msi文件并替换图标. 该解决方案工作正常。

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

4

5 回答 5

38

我为此找到的最简单的解决方案可能是在 Orca 内部创建一个新的“变换”,然后将变换应用为我的后期构建步骤的一部分。

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

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

可以在以下位置找到有关 MSITran.exe 的更多信息... MSITran

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

于 2010-06-17T17:03:12.910 回答
12

您可以编写 VBS、JS(使用每个 Windows 都内置的 cscript)来修改 MSI,语法非常类似于 SQL。 这是一个显示各种示例的 MSDN 页面。

于 2009-05-20T08:54:44.857 回答
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 数据库中的所有快捷方式图标替换为单个图标 - 如果您需要有选择性,那么您还有更多工作要做。

于 2010-05-14T10:53:32.513 回答
2

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

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

链接可能会帮助您编写所需的链接。

于 2009-05-20T08:47:56.353 回答
2

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

于 2010-04-28T06:51:20.403 回答