2009-07-22 24 views
10

Đối với ứng dụng .NET được cài đặt bằng ClickOnce, có cách nào để chạy hành động tùy chỉnh trong quá trình gỡ cài đặt hay không.Tác vụ tùy chỉnh khi gỡ cài đặt (nhấp chuột) - trong .NET

Cụ thể, tôi cần xóa một vài tệp liên quan đến ứng dụng (mà tôi đã tạo trong lần chạy đầu tiên) và gọi dịch vụ web trong quá trình gỡ cài đặt.

Bất kỳ ý tưởng nào?

Trả lời

3

Không có cách nào để làm điều đó với chính ClickOnce, nhưng bạn có thể tạo bootstrapper Setup.exe chuẩn cài đặt ứng dụng ClickOnce và có hành động gỡ cài đặt tùy chỉnh.

Lưu ý rằng điều này tuy nhiên điều này tạo ra hai mục nhập trong chương trình Thêm/loại bỏ, vì vậy bạn cần ẩn một trong các mục nhập (ứng dụng nhấp chuột).

vấn đề cuối cùng của bạn sau đó sẽ là không có tùy chọn "im lặng gỡ bỏ cài đặt" trên ClickOnce, vì vậy bạn có thể làm một cái gì đó như thế này:

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" 

(Tìm thấy here)

1

ClickOnce cài đặt một registry Uninstall trong HKEY_CURRENT_USER có thể truy cập được vào ứng dụng ClickOnce của bạn.

Các địa điểm cụ thể là "HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall"

Bạn sẽ phải tìm kiếm chìa khóa với DisplayName của ứng dụng của bạn.

Sau đó bạn có thể bọc hành động gỡ bỏ cài đặt bình thường,

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(); 
     } 
    } 
} 
Các vấn đề liên quan