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