2015-10-06 173 views
0

我正在创建一个应用程序,并且我要求在安装过程中应用程序会卸载一些其他已安装的程序,所以我首先做的是创建一个控制台应用程序,用于卸载程序并直到出现问题,我将这个控制台应用程序添加为安装程序中的自定义操作并构建了解决方案,但在安装时,卸载程序不起作用。在安装和部署过程中卸载应用程序

对不起,我英文不好:)。

我使用下面的代码进行卸载。

 string UninstallCommandString = "/x {0} /qn"; 
     Process process = new Process(); 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     process.StartInfo = startInfo; 

     startInfo.UseShellExecute = false; 
     startInfo.RedirectStandardError = true; 

     startInfo.FileName = "msiexec.exe"; 
     startInfo.Arguments = string.Format(UninstallCommandString, "{CCB85747-267D-45C6-AC32-7979ADFCD2D8}"); 
     process.Start(); 
     process.WaitForExit(); 

     string UninstallCommandString2 = "/x {0} /qn"; 
     Process process2 = new Process(); 
     ProcessStartInfo startInfo2 = new ProcessStartInfo(); 
     process2.StartInfo = startInfo2; 

     startInfo2.UseShellExecute = false; 
     startInfo2.RedirectStandardError = true; 

     startInfo2.FileName = "msiexec.exe"; 
     startInfo2.Arguments = string.Format(UninstallCommandString2, "{7A8A8C03-6BEA-45B4-BAD9-EBC5790A037A}"); 
     process2.Start(); 
     process2.WaitForExit(); 


     string UninstallCommandString3 = "/x {0} /qn"; 
     Process process3 = new Process(); 
     ProcessStartInfo startInfo3 = new ProcessStartInfo(); 
     process3.StartInfo = startInfo3; 

     startInfo3.UseShellExecute = false; 
     startInfo3.RedirectStandardError = true; 

     startInfo3.FileName = "msiexec.exe"; 
     startInfo3.Arguments = string.Format(UninstallCommandString3, "{6AFDD6D0-3F33-45F0-B058-677F2080AE22}"); 
     process3.Start(); 
     process3.WaitForExit(); 

     string UninstallCommandString4 = "/x {0} /qn"; 
     Process process4 = new Process(); 
     ProcessStartInfo startInfo4 = new ProcessStartInfo(); 
     process4.StartInfo = startInfo4; 

     startInfo4.UseShellExecute = false; 
     startInfo4.RedirectStandardError = true; 

     startInfo4.FileName = "msiexec.exe"; 
     startInfo4.Arguments = string.Format(UninstallCommandString4, "{ACC5E4C6-B4D2-4227-B577-95D511C05A6E}"); 
     process4.Start(); 
     process4.WaitForExit(); 

回答

0

您无法从自定义操作执行安装或卸载,并且特别适用于VS安装项目。一次只允许一个MSI操作。

通常情况下,您需要进行重大升级,即VS安装项目中的RemovePreviousVersions,但VS不支持升级安装程序的当前UpgradeCode。另一个工具(如Wix)会让你列出一堆升级代码,你的安装会自动卸载相关的产品。

所以这取决于您的工作流程要求。你可以将你的设置压缩成一个运行你的卸载的自解压exe文件,然后运行你的setup.exe(如果你有安装的先决条件)或者只是安装你的MSI。或者,您可以使用MSI编辑器工具(如Orca)将这些MSI产品的UpgradeCodes添加到您的MSI的升级表中,并且您已经构建了RemovePreviousVersions升级,然后将其卸载。没有太多的答案,但你正在尝试做一些Windows Installer不支持的操作(来自自定义操作的MSI操作),VS不支持(卸载其他产品的升级)。

+0

是的,感谢您的回复,我得到了这一点,我得到了解决方案,比我想象的要容易,有两种方法可以做到这一点。 1. InstallShield自定义操作,在初始化之后(在对话框之前):如果我在此部分中运行我的代码完美工作,因为它在安装之前完成,问题在于,它不适用于远程部署和无提示安装。 2. InstallShield升级路径:只需添加要卸载的.msi程序文件,并且完美无瑕! –

相关问题