C# 使用wirunsql的正确方法&;WiSumInf创建多个安装程序

C# 使用wirunsql的正确方法&;WiSumInf创建多个安装程序,c#,windows-installer,C#,Windows Installer,让我解释一下我的情况,因为它很复杂! 从Visual Studio 2019开始,我制作了一个MSI安装程序,用于在用户PC上安装Windows窗体应用程序。此安装程序仅定义了一个自定义操作,该操作在卸载阶段从控制面板运行(此自定义操作执行删除Windows服务的命令)。此MSI安装程序运行良好,没有任何问题。我可以安装应用程序,它运行良好,当我卸载它时,将执行自定义操作,并从操作系统中删除我的Windows服务。好的 现在我需要安装此应用程序的多个实例,因此我使用Windows Install

让我解释一下我的情况,因为它很复杂! 从Visual Studio 2019开始,我制作了一个MSI安装程序,用于在用户PC上安装Windows窗体应用程序。此安装程序仅定义了一个自定义操作,该操作在卸载阶段从控制面板运行(此自定义操作执行删除Windows服务的命令)。此MSI安装程序运行良好,没有任何问题。我可以安装应用程序,它运行良好,当我卸载它时,将执行自定义操作,并从操作系统中删除我的Windows服务。好的

现在我需要安装此应用程序的多个实例,因此我使用Windows Installer SDK创建许多(目前有四个)MSI文件。假设我的基本安装程序名为App.msi;使用批处理文件创建App_01.msi、App_02.msi、App_03.msi和App_04.msi。 然后使用以下脚本修改每个安装程序:

cscript wirunsql.vbs App_01.msi“更新属性集值=”{BB0E2A06-A974-4416-A2B3-EE883A9BAE2D}'其中属性='ProductCode'” cscript wirunsql.vbs App_01.msi“更新属性集值='App 1'其中属性='ProductName'” cscript wirunsql.vbs App_01.msi“更新快捷方式集名称='App 1'” cscript WiSumInf.vbs App_01.msi 9={8D6AE98C-0C35-4283-87B9-E20263A3F9C5} cscript WiSumInf.vbs App_01.msi 2=“App 1”

上面的代码只是我实际批处理文件的一个片段,它只修改App_01.msi。 现在我可以成功地运行四个安装程序,并且可以在四个不同的文件夹中安装我的Windows窗体应用程序的四个实例

最后,问题是:卸载自定义操作仅在卸载应用程序的最后一个实例时运行,而不考虑安装顺序。我的问题也在这篇文章中描述:。但我找不到解决办法;也许我在创建多个MSI时错了

原因是什么?有人能帮我吗


非常感谢

上面的脚本格式不正确,很抱歉。每个cscript命令都会在MSI数据库中执行SQL语句,以更新安装程序的一些重要信息:产品代码、产品名称、快捷方式等。也许我遗漏了其他信息?我希望每个安装程序都不同于其他安装程序,这样我就可以安装/卸载每个MSI,包括卸载自定义操作。在我看来,如果有四个不同的产品显示为已安装,那么更新它们的SQL不是问题。问题似乎出现在卸载自定义操作和任何可能围绕该操作的条件中。话虽如此,我认为您可能看到的是,每次安装都是引用计数。每次安装都使用相同的组件GUID安装相同的服务。很难说没有更多的定义你的自定义操作在做什么。您是否记录了卸载以确认操作仅在最后一个上运行?