0

プログラムの追加/削除と同様に、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という新しいタイプであるため、それが機能しないのはなぜですか?それも解析してください。

文字列を解析するのではなく、それを行うより良い方法はありますか。

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 に答える