對於.NET應用程序,有沒有辦法運行在卸載過程中自定義操作。上卸載自定義操作(的ClickOnce) - 使用ClickOnce安裝.NET
具體來說,我需要刪除一些應用程序相關的文件(這是我第一次運行創建),並在卸載過程中調用Web服務。
任何想法?
對於.NET應用程序,有沒有辦法運行在卸載過程中自定義操作。上卸載自定義操作(的ClickOnce) - 使用ClickOnce安裝.NET
具體來說,我需要刪除一些應用程序相關的文件(這是我第一次運行創建),並在卸載過程中調用Web服務。
任何想法?
有沒有辦法做到這一點使用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)
的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();
}
}
}