我在 VS 2010 中使用安装项目创建了一个安装程序。它将我的应用程序安装到程序文件文件夹中,比如说 XXX。我的应用程序进一步在 XXX 文件夹中创建了一些文件和文件夹。在卸载时,它会删除安装程序创建的所有内容,而我的应用程序创建的文件和文件夹仍保留在 XXX 中。
我编写了一些自定义代码来使用installerclass删除文件夹(XXX),但是当用户从控制面板卸载时不执行,而从我创建的安装程序卸载时成功执行。
4 回答
第一步是修改您的应用程序,以便将其数据写入每个用户的位置,而不是应用程序文件夹。例如,您可以使用当前用户 AppData 目录中的自定义文件夹。这样可以避免与权限相关的问题。
要删除此文件夹,您确实可以使用自定义操作。如果在安装项目的卸载下添加它,它应该同时运行控制面板和包卸载。
尝试创建详细的卸载日志并搜索您的自定义操作名称以查看会发生什么。
我认为您不应该为此编写任何自定义代码,如果您的所有文件都标记为临时文件而不是永久文件,那么这将由 MSI 引擎直接处理。
使用文件夹、文件和安装项目本身的配置和属性,您将获得所需的内容,而无需编写代码。
我的猜测是您用于删除文件的自定义操作已安排在 UI 部分。从控制面板开始卸载时,它会在最小 UI 模式下运行,并且会跳过所有对话框。
您的自定义操作必须安排在InstallExecute
表格中。
(要与 UAC 兼容,必须使用noimpersonate进行延迟。但是您的应用程序本身与 UAC 不兼容,所以这并不重要。)
不要这样做!首先,用户通常不喜欢在没有警告的情况下删除他们放在应用程序目录中的数据文件(例如,他们可能只是卸载它,因为他们想将其移动到不同的驱动器)。如果需要,最好让最终用户手动删除它们。另外,如果用户不小心将程序安装在错误的目录(例如C:\WINDOWS),然后又去卸载它,可能会造成灾难性的后果。或者如果用户将他珍贵的色情视频隐藏在应用程序文件夹中怎么办?再说一次,不要这样做!