【问题标题】:Set up uninstall and Add/Remove Program uninstall设置卸载和添加/删除程序卸载
【发布时间】:2015-05-19 03:30:19
【问题描述】:

有两种方法可以卸载我的应用程序。

  1. 使用相同的设置。
  2. 控制面板中的添加/删除程序

我们的设置中有一个特殊的卸载程序,它会启动一些特殊的对话框来获取用户输入。以这种方式,根据用户输入进行卸载。但问题是,如果您使用“添加/删除程序”卸载它,则不会执行特殊的卸载过程。有没有办法通过“添加/删除程序”启动特定于应用程序的卸载?

【问题讨论】:

  • 在添加/删除程序上单击“卸载”时是否要启动自定义的卸载对话框?

标签: c# .net installation installshield addremoveprograms


【解决方案1】:

如果您使用的是基于 MSI 的项目,则“卸载”按钮将以被动模式运行卸载。因此,您的 UI 或对话序列中的任何操作都将被跳过。要解决此问题,通常禁用卸载按钮(请参阅 ARPNOREMOVE)并要求最终用户通过修改按钮(确实显示 UI)来代替。

【讨论】:

  • +1,感谢您的回答。我试图更改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{xxxx}-->UninstallString”以获取 UI,但失败了。 MsiExce 不使用此字符串来卸载应用程序吗?如果是这样,UnistallString 的目的是什么?
  • 不。这里的 UninstallString 大概是为了与直接查看 Uninstall 键但不了解 MSI 的应用程序向后兼容。见stackoverflow.com/a/1826857/89999
  • 你提出的是我能找到的唯一可能的解决方案。目前,我们的设置中不提供修改或修复选项。但 ARP 按钮仍然显示“更改”。是否可以更改按钮显示名称?
  • 我相信按钮上的文字是由微软控制的,所以你可以通过升级或降级你的 Windows 版本看到不同的文字。否则(实际上)您无法更改此按钮上的文本。
【解决方案2】:

您可以使用WMI 来完成。您可以根据需要自定义卸载程序软件。为此,您必须使用Win32_Product classuninstall method。以下是在本地机器上卸载程序的示例:

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class CallWMIMethod
    {
        public static void Main()
        {
            try
            {
                ManagementObject classInstance =
                    new ManagementObject("root\\CIMV2",
                    "Win32_Product.IdentifyingNumber='{EDDE41A3-A870-4D97-A1ED-67FF62AA0552}',Name='MyServiceSetup',Version='1.0.0'",
                    null);

                // No method in-parameters to define


                // Execute the method and obtain the return values.
                ManagementBaseObject outParams =
                    classInstance.InvokeMethod("Uninstall", null, null);

                // List outParams
                Console.WriteLine("Out parameters:");
                Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]);
            }
            catch(ManagementException err)
            {
                MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message);
            }
        }
    }
}

您可以通过 Error CodesWindows 桌面应用程序)查看返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多