为什么在安装过程中不会调用Uninstall方法?
我知道有other问题是similar,但要么他们没有正确回答或答案没有解决我的问题。为什么在安装过程中不会调用Uninstall方法?
我的程序有一个主框架以及框架的各种插件。插件通过一个XML文件进行管理,该文件包含了框架动态加载插件所需的信息。
我有一个常见的Installer
类,它用于处理插件安装期间的自定义操作。
在安装过程中,需要加载XML文件并在其中添加一个新节点,其中列出加载插件所需的信息。
在卸载过程中,只需要从XML文件中删除相同的节点。
安装工作正常。当我尝试卸载插件时,Installer
的卸载方法甚至不会被调用。
如果需要更多信息,请不要犹豫,问。
您确认自定义操作配置正确吗?我建议你在整个地方放一些MessageBox,这样你就可以跟踪发生了什么。
尝试删除卸载自定义操作保存项目,然后再次将其添加回来。另外,如果你想调试安装程序包,你可以添加以下内容:
Debugger.Launch();
在覆盖方法,而不是使用消息框的beggining。
尝试删除它并再次添加它(事实上几次)。我不知道'Debugger.Launch()',但是当它添加到4种不同类型的自定义动作的开始时,只有'Install'和'Commit'的启动调试器。 – Anthony 2011-03-30 12:44:23
我遇到同样的问题,卸载方法没有得到执行。 在我卸载目标位置的安装程序和所有文件后,我使用安装名称和主输出文件名删除了注册表中的所有引用。 (除了visual studio使用的键值) 之后,卸载方法再次执行。 它看起来像以前不成功的安装在注册表中没有很好地清理。
这就是我知道'Uninstall'方法没有被调用的方式。我在4个操作的每一个中都有一个MessageBox,所以我可以精确地告诉每个操作何时被调用。正在调用'Install'和'Commit','Rollback'和'Uninstall'不是。我现在真的不在乎'回滚',只有'卸载'。 – Anthony 2011-03-30 12:07:59
而且您已确认“InstallerClass”在该自定义操作中为“true”,并且指向正确的程序集? – 2011-03-30 12:10:30
是的,对于所有四种自定义操作类型。 – Anthony 2011-03-30 12:17:12