문제

ClickOnce를 사용하여 설치된 .NET 애플리케이션의 경우 제거 프로세스 중에 사용자 지정 작업을 실행할 수 있는 방법이 있습니까?

특히, 몇 가지 앱 관련 파일(처음 실행 시 생성)을 삭제하고 제거 프로세스 중에 웹 서비스를 호출해야 합니다.

어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

ClickOnce 자체로는 그렇게 할 수있는 방법이 없지만 ClickOnce 응용 프로그램을 설치하고 사용자 정의 UNINSTALL 작업이있는 표준 setup.exe bootstrapper를 만들 수 있습니다.

그러나 이것은 Add /Remog 프로그램에서 두 개의 항목을 생성하므로 항목 중 하나 (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"

(설립하다 여기)

다른 팁

ClickOnce는 ClickOnce 애플리케이션에 액세스할 수 있는 HKEY_CURRENT_USER에 제거 레지스트리 키를 설치합니다.

구체적인 위치는 "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"입니다.

애플리케이션의 DisplayName으로 키를 검색해야 합니다.

그런 다음 일반적인 제거 작업을 래핑할 수 있습니다.

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();
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top