0

我正在使用 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所以也解析它。

有没有更好的方法来做到这一点,而不是解析字符串。

4

1 回答 1

0

我也在 MSDN 论坛上发布了同样的问题并得到了答案。任何需要帮助的人请访问下面的链接

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/207c145a-60ff-4d68-878d-d0139b2b274c

谢谢

于 2010-05-30T03:41:40.563 回答