プログラムの追加/削除と同様に、VB.NET を使用してデスクトップ ベースのアプリケーションを開発しています。アンインストール機能の作業を開始するまで、すべてが正常に機能していました。
今私がやっていることは、レジストリから特定のアプリケーションのアンインストール文字列を取得し、System.Diagnostics.Process を使用して UninstallString を実行することです。
Dim proc As New Process()
proc.StartInfo.FileName =UninstallString
proc.Start()
proc.WaitForExit()
proc.Close()
後者は、ストレートファイルパスでのみ機能することがわかりました。つまり、次のようなコマンドライン引数がありません。
C:\program files\someApp\uninstall.exe
マシンにインストールされているすべてのアプリケーションのすべての UninstallStrings のリストを作成します。MSIを使用してインストールされたアプリケーションのようなものはほとんど見つかりませんでした.rundll32を使用したものもあれば、次のようなコマンド引数を持つストレートファイルパスを使用したものもほとんどありませんでした:
My Silverlight SDK UninstallString、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
My Google Chrome UninstallString、コマンド引数付きのストレート ファイル パスの例
"C:\Program Files\Google\Chrome\Application\5.0.375.55\Installer\setup.exe" -アンインストール
上記のコードは、これらに対しては機能しません。私はいくつかの文字列解析を行い、UninstallString から 2 つを分離しました。1 つはファイル名で、もう 1 つは引数です。MSI の場合と同様に、ファイル名は MSIEXEC.EXE で、引数は文字列の残りの部分になります。RunDLL32 の場合と同じで、コマンド引数を使用したストレート ファイル パスの場合も同じです。
今私が直面しているのは、2、3 日ごとに、このタイプの unistallstring も機能していないことを知るようになるということです。そして、おそらくabc C:\program files\someapp.exe -dddという新しいタイプであるため、それが機能しないのはなぜですか?それも解析してください。
文字列を解析するのではなく、それを行うより良い方法はありますか。