C# 为什么在安装过程中不调用卸载方法?

C# 为什么在安装过程中不调用卸载方法?,c#,visual-studio-2010,deployment,windows-installer,C#,Visual Studio 2010,Deployment,Windows Installer,我知道有一些问题没有得到正确的回答,或者答案没有解决我的问题 我的程序有一个主框架以及用于该框架的各种插件。插件通过一个XML文件进行管理,该文件包含框架动态加载插件所需的信息 我有一个通用的Installer类,用于处理插件安装期间的自定义操作 在安装过程中,它需要加载XML文件,并在其中添加一个新节点,列出加载插件所需的信息 在卸载过程中,只需从XML文件中删除相同的节点 安装工作正常。当我尝试卸载插件时,安装程序的卸载方法甚至没有被调用 如果需要更多信息,请随时询问。您是否确认自定义操作配

我知道有一些问题没有得到正确的回答,或者答案没有解决我的问题

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

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

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

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

安装工作正常。当我尝试卸载插件时,
安装程序的卸载方法甚至没有被调用


如果需要更多信息,请随时询问。

您是否确认自定义操作配置正确?我建议你在所有地方放一些信息框,这样你就可以跟踪发生了什么

您是否确认自定义操作配置正确?我建议你在所有地方放一些信息框,这样你就可以跟踪发生了什么

尝试删除卸载自定义操作保存项目,然后重新添加。此外,如果要调试安装程序包,可以添加以下内容:

Debugger.Launch();

在调用重写方法时,不要使用消息框。

尝试删除卸载自定义操作保存项目,然后重新添加。此外,如果要调试安装程序包,可以添加以下内容:

Debugger.Launch();

在请求重写方法而不是使用消息框时。

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

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

您尝试过上面提到的解决方案吗


我相信有时候VisualStudio会进行就地升级,但实际上不会卸载旧版本。

您是否尝试过上述解决方案


我相信有时候VisualStudio会进行就地升级,实际上不会卸载旧版本。

这就是为什么我知道没有调用
uninstall
方法的原因。我在4个动作中的每一个动作中都有一个MessageBox,这样我就可以准确地知道每一个动作何时被调用<正在调用代码>安装
和提交,
回滚
卸载
。我现在真的不关心
回滚
,只关心
卸载
。您已经确认该自定义操作的“InstallerClass”为“true”,并且它指向正确的程序集?是的,对于所有四种自定义操作类型。卸载时,安装程序类所在的DLL是否仍位于安装目录中?是。我曾经遇到的一个问题是,一个插件会将其删除,导致之后删除另一个插件失败。通过在安装程序的文件系统配置中设置相应的属性,将安装程序的dll设置为永久性,可以解决此问题。(请注意,我在一个快速测试中尝试将永久设置为false(默认设置),以查看这是否导致了
Uninstall
问题)。这就是我如何知道没有调用
Uninstall
方法的原因。我在4个动作中的每一个动作中都有一个MessageBox,这样我就可以准确地知道每一个动作何时被调用<正在调用代码>安装和提交,
回滚
卸载
。我现在真的不关心
回滚
,只关心
卸载
。您已经确认该自定义操作的“InstallerClass”为“true”,并且它指向正确的程序集?是的,对于所有四种自定义操作类型。卸载时,安装程序类所在的DLL是否仍位于安装目录中?是。我曾经遇到的一个问题是,一个插件会将其删除,导致之后删除另一个插件失败。通过在安装程序的文件系统配置中设置相应的属性,将安装程序的dll设置为永久性,可以解决此问题。(但是请注意,我在一个快速测试中尝试将永久设置为false(默认设置),以查看这是否导致了
卸载问题)。尝试将其删除并再次添加(事实上有几次)。我不知道有关
Debugger.Launch()
的信息,但当将其添加到4种不同类型的自定义操作的开头时,只有用于
Install
Commit
的操作才会启动调试器。尝试将其删除并再次添加(事实上有几次)。我不知道如何使用
Debugger.Launch()
,但当将其添加到4种不同类型的自定义操作的开头时,只有用于
Install
Commit
的操作才会启动调试器。