سؤال

للحصول على تطبيق .NET المثبت باستخدام ClickOnce، هل هناك أي طريقة لتشغيل إجراء مخصص أثناء عملية إلغاء التثبيت.

على وجه التحديد، أحتاج إلى حذف عدد قليل من الملفات ذات الصلة بالتطبيقات (التي قمت بإنشائها على المدى الأول) واستدعاء خدمة ويب أثناء عملية إلغاء التثبيت.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

لا توجد طريقة للقيام بذلك مع ClickOnce نفسها، ولكن يمكنك إنشاء Bootstrapper 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"

(وجد هنا)

نصائح أخرى

يقوم ClickOnce بتثبيت مفتاح التسجيل إلغاء التثبيت في HKEY_CURRENT_USER الذي يمكن الوصول إليه إلى تطبيق ClickOnce الخاص بك.

الموقع المحدد هو "HKEY_CURRENT_USER Software Microsoft Windows CurrentsVersion Uninstall"

سيكون عليك البحث عن المفتاح مع اسم عرض التطبيق الخاص بك.

يمكنك بعد ذلك التفاف إجراء إلغاء التثبيت الطبيعي،

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