【问题标题】:Use Orca to edit msi from command line?使用 Orca 从命令行编辑 msi?
【发布时间】:2010-10-27 13:48:22
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 效果很好!比基于 VBScript 的解决方案干净得多。
    • 我想将值 ARPCOMMENTS 分配给 ProductVersion 属性。可以通过转换文件实现吗
    • 一个疑问:通过将 Orca 之前创建的转换应用到当前产品版本,我们会失去为最新版本构建的主要输出,对吗?
    • 它会生成 .mst 二进制文件...如果我想即时更改字符串并经常更新安装程序,则该文件不易编辑
    【解决方案2】:

    您可以编写 VBS、JS(使用每个 Windows 都内置的 cscript)来修改 MSI,语法很像 SQL。 Here is a MSDN page that shows various examples.

    【讨论】:

    • 对于将执行这些查询的 VBScript,请尝试在 Google 上搜索“WiRunSQL.vbs 源”
    【解决方案3】:

    我也必须这样做 - 这是我的 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 数据库中的所有快捷方式图标替换为单个图标 - 如果您需要有选择性,那么您还有更多工作要做。

    【讨论】:

      【解决方案4】:

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

      此 perl 脚本可用于构建。

      这个link 可能会帮助您编写所需的。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-09
          • 1970-01-01
          • 2013-10-28
          • 1970-01-01
          • 1970-01-01
          • 2011-06-05
          • 1970-01-01
          相关资源
          最近更新 更多