我正在使用 VB.NET 开发一个基于桌面的应用程序,类似于添加/删除程序。一切正常,直到我开始使用卸载功能。
现在我要做的是从注册表中获取特定应用程序的卸载字符串并使用 System.Diagnostics.Process 来运行 UninstallString。
Dim proc As New Process()
proc.StartInfo.FileName =UninstallString
proc.Start()
proc.WaitForExit()
proc.Close()
后者我发现它仅适用于直接文件路径,我的意思是没有命令行参数,例如:
C:\程序文件\someApp\uninstall.exe
我列出了我机器上安装的所有应用程序的所有 UninstallStrings 列表。我发现很少有使用 MSI 安装的应用程序之类的东西,有些是带有 rundll32 的,很少有带有一些命令参数的直接文件路径,例如:
我的 Silverlight SDK 卸载字符串,MSI 示例
MsiExec.exe /X{2012098D-EEE9-4769-8DD3-B038050854D4}
我的 JetAudio UninstallString,RunDll32 示例
RunDll32 C:\PROGRA~1\COMMON~1\INSTAL~1\engine\6\INTEL3~1\Ctor.dll,LaunchSetup "C:\Program Files\InstallShield 安装信息{91F34319-08DE-457A-99C0-0BCDFAC145B9} \Setup.exe" -l0x9
我的 Google Chrome UninstallString,带有命令参数示例的直接文件路径
“C:\Program Files\Google\Chrome\Application\5.0.375.55\Installer\setup.exe”-卸载
我上面提到的代码不适用于这些。我做了一些字符串解析,将两件事与 UninstallString 分开,一个是文件名,另一个是参数。与 MSI 一样,文件名是 MSIEXEC.EXE,参数将是字符串的其余部分,对于 RunDLL32 相同,对于带有命令参数的直接文件路径也是如此。
现在我面临的是,每 2 或 3 天后我才知道这种类型的 unistallstring 也不起作用。为什么这不起作用,因为它是一种新类型,可能是abc C:\program files\someapp.exe -ddd所以也解析它。
有没有更好的方法来做到这一点,而不是解析字符串。