当前位置: 首页 > 编程语言 > C#

如何在c#中使用其产品代码卸载MSI分享

时间:2023-04-11 03:03:15 C#

C#学习教程:如何在c#中使用其产品代码卸载MSI过程();p.StartInfo.FileName="msiexec.exe";p.StartInfo.Arguments="/x"C:\MyApplication.msi"/qn";p.开始();但我想知道如何在不使用MSI的情况下卸载应用程序?在上面的场景中,我应该在特定位置安装MSI来卸载应用程序,如果我可以使用产品代码解压缩它,那么我就不需要在目标机器上安装MSI。根据MSDN,您可以使用产品代码卸载它:msiexec.exe/x{your-product-code-guid}使用产品代码时,它使用C:\WINDOWSInstaller的缓存MSI。根据PhilmE的回答,WindowsInstallerXML(WiX)将Microsoft.Deployment.WindowsInstaller互操作库作为DeploymentToolsFoundation(DTF)的一部分提供。这会跳过COM互操作并包装Win32API。使用Microsoft.Deployment.WindowsInstaller;publicstaticvoidUninstall(stringproductCode){Installer.ConfigureProduct(productCode,0,InstallState.Absent,"REBOOT="R"/l*vuninstall.log");}可能对于您的情况,知道“/x”参数就足够了。两条评论:更安全的方法是在命令行中添加“REBOOT=R”部分。您可以添加日志文件路径:msiexec/x"..."/qnREBOOT=R/L*v"c:mylogdirmymsi.log"其次,不要尝试更改任何“缓存”。你甚至不需要理解它。如果缓存的包损坏,将无法再进行常规卸载,这可能会使计算机处于“需要支持”状态。由于您的问题最初是关于C#..您不必使用msiexec:a)使用带有函数MsiInstallProduct()或MsiConfigureProduct()的原始C/C++API。MSDN参考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa370315(v=vs.85).aspx您必须使用互操作才能在C#中使用它。或者b)使用WindowsInstaller对象。比如这个相关案例在stackoverflow中已经回答:InstallinganMSIpackageprogrammaticallybutusingthisfunctionrequiresaphysicalpackage,whichalsoneedstouninstalled。稍微间接一点,下面是更好的卸载代码:首先,将对COM对象“MicrosoftWindowsInstallerObjectLibrary”的引用添加到项目中。使用WindowsInstaller;publicstaticclassMyMsiLib{publicstaticvoidUninstall(stringproductCode){Typetype=Type.GetTypeFromProgID("WindowsInstaller.Installer");安装程序installer=(Installer)Activator.CreateInstance(type);安装程序.UILevel=msiUILevelNone;安装程序配置产品(产品代码,0,msiInstallStateAbsent);之前的UILevel属性设置是硬编码的,以确定您想要静音的UI级别。其他属性也是如此。请参阅上面链接中提到的MSDN文档。当然,“真正的程序员”使用原始API而不是“安装程序对象”:-)但是对于小的用途来说它已经足够好了。而且更容易。此命令在命令行上有效:msiexec/x{3A40307D-6DF2-4412-842F-B1D848043367}/quiet我没有在C#中尝试过,但是用上面显示的键替换您的参数应该可以。您可以在要卸载的应用程序的注册表项中找到GUID。以上是C#学习教程:如何在c#中使用其产品代码卸载微星分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: