2011-03-30 43 views
0

我知道有other问题是similar,但要么他们没有正确回答或答案没有解决我的问题。为什么在安装过程中不会调用Uninstall方法?

我的程序有一个主框架以及框架的各种插件。插件通过一个XML文件进行管理,该文件包含了框架动态加载插件所需的信息。

我有一个常见的Installer类,它用于处理插件安装期间的自定义操作。

在安装过程中,需要加载XML文件并在其中添加一个新节点,其中列出加载插件所需的信息。

在卸载过程中,只需要从XML文件中删除相同的节点。

安装工作正常。当我尝试卸载插件时,Installer的卸载方法甚至不会被调用。

如果需要更多信息,请不要犹豫,问。

回答

0

您确认自定义操作配置正确吗?我建议你在整个地方放一些MessageBox,这样你就可以跟踪发生了什么。

+0

这就是我知道'Uninstall'方法没有被调用的方式。我在4个操作的每一个中都有一个MessageBox,所以我可以精确地告诉每个操作何时被调用。正在调用'Install'和'Commit','Rollback'和'Uninstall'不是。我现在真的不在乎'回滚',只有'卸载'。 – Anthony 2011-03-30 12:07:59

+0

而且您已确认“InstallerClass”在该自定义操作中为“true”,并且指向正确的程序集? – 2011-03-30 12:10:30

+0

是的,对于所有四种自定义操作类型。 – Anthony 2011-03-30 12:17:12

1

尝试删除卸载自定义操作保存项目,然后再次将其添加回来。另外,如果你想调试安装程序包,你可以添加以下内容:

Debugger.Launch(); 

在覆盖方法,而不是使用消息框的beggining。

+0

尝试删除它并再次添加它(事实上几次)。我不知道'Debugger.Launch()',但是当它添加到4种不同类型的自定义动作的开始时,只有'Install'和'Commit'的启动调试器。 – Anthony 2011-03-30 12:44:23

3

我遇到同样的问题,卸载方法没有得到执行。 在我卸载目标位置的安装程序和所有文件后,我使用安装名称和主输出文件名删除了注册表中的所有引用。 (除了visual studio使用的键值) 之后,卸载方法再次执行。 它看起来像以前不成功的安装在注册表中没有很好地清理。

0

你有没有尝试过的方案中提到here

我相信有时候Visual Studio中做一个在就地升级,而实际上不卸载旧版本。

相关问题