【问题标题】:Passing REINSTALLMODE to an MSI file将 REINSTALLMODE 传递给 MSI 文件
【发布时间】:2009-12-22 16:27:47
【问题描述】:

我正在使用 VisualStudio2005 和 vdproj 创建一个简单的 MSI 文件。我需要在启动时传入 REINSTALLMODE 属性。

我知道这可以通过命令行完成,如下所示: msiexec.exe /i foo.msi REINSTALLMODE=amus

但是,如果用户选择直接单击 msi(启动向导),则不会传递该属性。是否可以通过 VS 和 vdproj 做到这一点?

我研究过的一些选项:

  • 当我通过 VS 构建 MSI 时,它还会生成一个 setup.exe。有没有办法通过这个传递 REINSTALLMODE 属性?
  • 我安装了 Orca,它允许我查看/编辑 MSI 的属性表。我可以通过这种方式添加它,但每次我构建 MSI 时都必须添加它。

感谢您的建议。

【问题讨论】:

    标签: deployment .net-2.0 windows-installer vdproj


    【解决方案1】:

    我找到了一种更自动化的方法。

    使用以下内容创建一个名为 add_reinstall_prop.vbs(示例)的脚本:

    set objArgs = WScript.Arguments
    set o_installer = CreateObject("WindowsInstaller.Installer")
    set o_database = o_Installer.OpenDatabase(objArgs(0), 1)
    s_SQL = "INSERT INTO Property (Property, Value) Values( 'REINSTALLMODE', 'amus')"
    set o_MSIView = o_DataBase.OpenView( s_SQL)
    o_MSIView.Execute
    o_DataBase.Commit
    

    在您的安装项目中添加一个构建后事件,调用以下脚本:

    add_reinstall_prop.vbs $(BuiltOuputPath)
    

    这会自动将所需的条目添加到构建的 MSI。 然后您可以使用 Orca 检查它,以查看该条目现在是在构建后自动添加的。

    【讨论】:

    • 感谢它的魅力。我需要为 add_reinstall_prop.vbs "$(BuiltOuputPath)" 使用双引号
    【解决方案2】:

    很遗憾,我找不到在 VStudio 中设置其他 MSI 属性的方法。

    不过,一种应该可行的方法是:

    1. 使用 Orca 创建仅更改属性 REINSTALLMODE 的转换 (MST)。 (简而言之,您编辑属性并保存为新的转换,然后使用“生成转换”命令创建 MST。)
    2. 可以使用MSITRAN.EXE 命令(在您找到 Orca 的同一 Windows Installer SDK 中提供)将此转换直接应用于您的 MSI。
    3. 您可以: (a) 找到一种方法让 Visual Studio 始终在 MSI 构建后立即运行您的 MSITRAN 命令,或者 (b) 在构建之后但在测试之前手动运行您的 MSITRAN(从批处理文件等)。

    【讨论】:

    • (如果这个 msi 变得更复杂,我可能应该尝试使用 WiX)
    • 确实,WiX 让您可以访问 Windows Installer 的所有复杂功能。但这有点学习曲线。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多