C# 通过cmd卸载中的exe程序

C# 通过cmd卸载中的exe程序,c#,cmd,exe,windows-installer,C#,Cmd,Exe,Windows Installer,我正在编写一个应用程序,从网络中删除Qmuzik ERP软件的旧版本并安装新版本。我使用C#中的Process方法通过cmd命令执行msi来安装新版本。我使用的命令是: msiexec /qn /i "MSI Path" 这个很好用 我这样做的原因是因为有多个msi必须按顺序运行。使用process方法,我可以观察进程并检测何时完成,并执行序列中的下一个msi。所有这些都在用户pc上悄悄地发生 问题是,在安装新版本之前,我必须卸载以前的版本。旧版本是使用exe安装文件安装到计算机上的。我曾尝

我正在编写一个应用程序,从网络中删除Qmuzik ERP软件的旧版本并安装新版本。我使用C#中的Process方法通过cmd命令执行msi来安装新版本。我使用的命令是:

msiexec /qn /i "MSI Path" 
这个很好用

我这样做的原因是因为有多个msi必须按顺序运行。使用process方法,我可以观察进程并检测何时完成,并执行序列中的下一个msi。所有这些都在用户pc上悄悄地发生

问题是,在安装新版本之前,我必须卸载以前的版本。旧版本是使用exe安装文件安装到计算机上的。我曾尝试将exe文件转换为msi,并通过命令行使用msiexec卸载,但它对已安装exe而不是转换后的msi(即整个网络)的实例没有影响


在cmd中是否有任何命令可用于卸载这些已使用exe安装的实例?

当您在Windows中安装程序时,将创建一个包含多个值的用于卸载的注册表项,其中包括UninstallString值,它是添加或删除程序在单击删除时使用的命令行

父密钥是:

HKEY\U本地\U计算机\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

这些卸载字符串通常具有以下格式:

MsiExec.exe/I{0826F9E4-787E-481D-83E0-BC6A57B056D5}

为了完成您试图执行的操作,您必须创建一个,读取要删除的应用程序的UninstallString值并运行命令行


更多信息。

您可以使用revo卸载程序,而不是它的卸载功能,而是它的主视图,它显示了应用程序注册的卸载字符串


但这只是一个起点。每个安装引擎都可以有自己的卸载字符串。如果幸运的话,您必须找到正确的文件(请尝试/quiet、/passive等,直到找到正确的文件)。

转到文件路径,查找需要卸载的.exe。在命令提示符下,打开位于的.exe路径并执行“xxxx.exe--uninstall”。

使用revo uninstaller,而不是它的卸载功能,而是它的主视图,该视图显示您的已注册卸载字符串application@SteveB,我下载并安装了revo卸载程序。我在注册表中得到了卸载字符串,值是“C:\PROGRA~2\Qmuzik32\UNWISE.EXE C:\PROGRA~2\Qmuzik32\INSTALL.LOG”Ami我正确地说我需要通过命令行执行UNWISE.EXE文件才能卸载?请记住,这必须安静地进行(即不需要用户进行交互),这是一个起点。每个安装引擎都可以有自己的卸载字符串。你必须找到正确的答案,如果你足够幸运,它能够存在(尝试/安静/被动等,直到找到正确的答案)@Steve B如果你在回答中添加上面的评论,我将很乐意接受。谢谢你的帮助。我把它整理好了。+1,很好的回答,其中一些甚至有一个
quietInstallString
:)托马斯,谢谢你。它帮助了我。公平地说,我不得不接受托马斯B的回答,因为他是第一个给出答案的人(即使是在评论中:-D)。如果他不把他的评论改为回答,我将欣然接受你的评论。不过给你一个。我不必创建注册表项对象,因为可以通过命令pramt和几个参数执行卸载字符串,从而安静地卸载应用程序。再次感谢你!J对不起,我的意思是@Steve B的答案/评论不要担心Joachim,我很高兴知道我的答案对你有帮助:)不是真正的答案。只是指导。