2009-07-22 132 views

回答

3

有沒有辦法做到這一點使用ClickOnce本身,但您可以創建一個標準的Setup.exe引導程序是安裝ClickOnce應用程序,並且有一個自定義卸載動作。

注意這個但是這會在添加兩個條目/刪除程序,所以你需要隱藏的條目之一(的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(); 
     } 
    } 
}