2009-07-22 20 views
10

ClickOnceを使用してインストールされた.NETアプリケーションの場合、アンインストールプロセス中にカスタムアクションを実行する方法はありますか。アンインストール時のカスタムアクション(clickonce) - .NET内

具体的には、最初に実行したときに作成したいくつかのアプリ関連ファイルを削除し、アンインストールプロセス中にWebサービスを呼び出す必要があります。

アイデア?

答えて

3

ClickOnce自体で行う方法はありませんが、ClickOnceアプリケーションをインストールし、カスタムアンインストールアクションを持つ標準のSetup.exeブートストラップを作成できます。

これは、追加/削除プログラムに2つのエントリを作成するため、エントリの1つ(clickonceアプリ)を非表示にする必要があることに注意してください。あなたはこのような何かができるよう

あなたの最後の問題は、その後、ClickOnceのには、「サイレントアンインストール」オプションが存在しないことになります。

On Error Resume Next 

Set objShell = WScript.CreateObject("WScript.Shell") 

objShell.Run "taskkill /f /im [your app process name]*" 

objShell.Run "[your app uninstall key]" 
Do Until Success = True 
    Success = objShell.AppActivate("[your window title]") 
    Wscript.Sleep 200 
Loop 
objShell.SendKeys "OK" 

(発見here)を

1

ClickOnceのは、アンインストールレジストリをインストールしますあなたのClickOnceアプリケーションにアクセス可能であるHKEY_CURRENT_USERでキー。

特定の場所は、アプリケーションの表示名とキーを検索する必要があります

「HKEY_CURRENT_USER \ SOFTWARE \マイクロソフト\ Windowsの\ CurrentVersionの\アンインストール」です。

あなたはその後、通常のアンインストールアクションをラップすることができ、

string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
Microsoft.Win32.RegistryKey uninstallKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(registryKey); 
if (uninstallKey != null) 
{ 
    foreach (String a in uninstallKey.GetSubKeyNames()) 
    { 
     Microsoft.Win32.RegistryKey subkey = uninstallKey.OpenSubKey(a, true); 
     // Found the Uninstall key for this app. 
     if (subkey.GetValue("DisplayName").Equals("AppDisplayName")) 
     { 
      string uninstallString = subkey.GetValue("UninstallString").ToString(); 

      // Wrap uninstall string with my own command 
      // In this case a reg delete command to remove a reg key. 
      string newUninstallString = "cmd /c \"" + uninstallString + 
       " & reg delete HKEY_CURRENT_USER\\SOFTWARE\\CLASSES\\mykeyv" + 
       MYAPP_VERSION + " /f\""; 
      subkey.SetValue("UninstallString", newUninstallString); 
      subkey.Close(); 
     } 
    } 
} 
関連する問題