我有很多解决方案,每个解决方案至少包含一个项目(让它们只是windows应用程序项目)。然后,我为每个Windows解决方案生成了一个安装程序(msi)解决方案。所以,我有myWindowsSolution1& myInstallerForMyWindowsSolution1(file1.msi),myWindowsSolution2& myInstallerForMyWindowsSolution2(file2.msi)...
现在,他们希望将安装程序完全放入1个安装程序中。是否可以在不丢失自动回滚的情况下执行此操作???我尝试的是制作一个循环遍历每个安装程序文件并执行该文件的应用程序,问题是,如果其中一个失败,已安装的应用程序将保持安装:
for (int i = 0; i < installers.Length; i++) {
Process p = Process.Start(installers[i]);
p.WaitForExit();
}
我还尝试将每个msi文件(以前转换为exe)放入myInstallerForMyWindowsSolution1,在CustomActions-&gt; Install下,但我又丢失了回滚。
将所有代码合并为1只有非常大的解决方案才是最后一个选择。
提前致谢。
答案 0 :(得分:3)
一种方法是制作一个包含所有单独设置MSI的大型“包装”安装。你提到你尝试了类似的东西,说,“我还尝试将每个msi文件(以前转换为exe)放入myInstallerForMyWindowsSolution1,在CustomActions-&gt; Install下,但我再次失去了回滚。” < / p>
这就是:您需要为每个安装创建自定义操作,但也需要为卸载应用程序创建自定义操作。因此,如果在安装期间其中一个自定义操作返回失败代码,则MSI将从回滚过程开始,其中包括卸载任何嵌入式MSI。确保安装自定义操作中的失败代码触发回滚,并且卸载自定义操作中的失败代码不会触发回滚。