我使用Installshield 2011创建了一个安装程序。我可以使用它安装软件,也可以从"程序和功能"中卸载。接口
但是如果已经安装了应用程序并且我再次单击安装程序,则会显示屏幕,说明它将卸载并卸载完成。但卸载实际上并没有发生。
我删除了删除对话框的所有事件,在删除表中,我已经安装了所有需要卸载的文件,并且安装模式为2。
不确定是什么问题... esp,因为我可以在"程序和功能"。
完成后正确卸载有任何建议/提示吗?
答案 0 :(得分:1)
在尝试对此进行太多分析之前,制作一个正确,详细的日志文件非常有用。替换路径以符合您的要求:
msiexec.exe /x "C:\Test.msi" /L*V! "C:\msilog.log"
命令行参数说明:
/x = run uninstallation sequence /L*V! "C:\Temp\msilog.log"= verbose logging, flush directly to log file without buffer
您是否实际对该删除对话框进行了任何修改,还是标准的?为什么要将文件添加到RemoveFile表?或者这是自动发生的吗?通常没有必要将文件添加到RemoveFile表,除非它们是由您的应用程序生成的,并且您希望在卸载时删除它们(通常在用户配置文件中)。
话虽如此,我刚刚回答了一个问题,涉及在静默模式和交互模式下运行卸载的区别。请阅读以下答案(及其相关问题): Uninstall from Control Panel is different from Remove from .msi
更新
可以卸载MSI文件的不同方式的卸载参考: Uninstalling an MSI file from the command line without using msiexec
如果您正在处理 Installscript MSI 文件,请尝试阅读其setup.exe parameters的参考资料:
答案 1 :(得分:0)
我的头脑中有几个调试建议:
尝试创建一个新的Basic MSI项目,并在Installshield中手动比较对话框中的详细信息。为您的新项目添加一些测试文件,并确保它以各种方式卸载(特别是对主设置不起作用的方式)。
如果没有看到任何明显的信息,或者您希望进行更有效的比较,请使用Wix的 dark.exe 文件将已编译的MSI反编译为Wix XML格式,以用于您的origiproject和新鲜的。然后找到对话框的Wix XML并检查设置。
版本控制你的安装源!当这样的问题出现时,你有更好的调试机会 - 包括只需要修改整个设置几个版本并重新做旧源代码中缺少的内容
如果您可以使新设置正常工作且旧设置无法合作,则将所有组件从旧设置迁移到新设置并不复杂。我这样做是为了使用"导出到项目"从Installscript MSI迁移到基本的MSI。通过右键单击每个组件可以选择(我相信选项所在的位置)。我花了几个小时进行大型设置。然后再用几个小时来正确验证所有自定义操作。
对于记录:将 Wix 与基于文本的源文件一起使用可以使调试变得更加轻松,并且强烈推荐:{{3} }。一旦习惯了,就可以将创建安装程序的速度与商业工具相匹配。
有关Wix的详细信息,包括快速入门建议: Windows Installer and the creation of WiX
有关安装程序的更多帮助,请查看:MSI vs nuget packages: which are is better for continuous delivery?