installshield - 为什么 InstallShield 2015 InstallScript 安装程序在卸载期间要求重新启动?
问题描述
多年来,我们一直在使用使用 InstallShield 2015 SP2 工具创建的 Installscript 安装程序来安装我们的应用程序,但是在处理我们的新版本时,我在此 Installscript 安装程序的卸载过程结束时收到了一个新对话框。它显示卸载完成的消息,并在下面提到的对话框底部提供两个单选按钮选项。
- 是的,我现在想重新启动计算机。
- 不,我稍后会重新启动计算机。
但是,安装程序的 Installscript 项目中没有添加此类代码,该代码在卸载完成后要求重新启动。我确实在谷歌上搜索过,但没有运气。希望任何人都知道如何在安装程序卸载结束时阻止此对话框出现。
解决方案
简短回答:我的猜测是,一个正在使用的文件(锁定)导致了自动重启提示的调度出现。锁定文件几乎总是导致此类问题的原因,并且提示是 MSI 本身的内置功能。正在使用的文件可能是未正确关闭的服务文件(MSI 中的超时或设计错误)。下面的一些细节。
You should enable logging to work out what triggered the reboot prompt
.
Docs Microsoft:重新启动请求的记录。来自日志文件的示例:
Info 1603. The file E:\testdb\Test\CustAct2.dll is being held in use.
Info 1903.Scheduling reboot operation: Deleting file [filename]. Must
reboot to complete operation.
日志记录:您应该启用日志记录以找出触发重启提示的原因。这是关于日志记录的答案: Enable installation logs for MSI installer without any command line arguments。您可以1)
启用日志记录策略,然后您可以找到在 TEMP 文件夹中运行的每个卸载的日志。2)
您还可以调用卸载msiexec.exe /x
并在命令行中指定日志记录位置。有关详细信息,请参阅链接的答案。
卸载日志:有关卸载日志命令,请参见此处的第 3 节:在不使用 msiexec 的情况下从命令行卸载 MSI 文件
msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=ReallySuppress
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=ReallySuppress
重新启动提示原因:很可能导致重新启动提示的原因是文件正在使用,因此无法删除。MSI 具有自动魔术功能,然后触发重新启动以替换或删除文件。重新启动使这成为可能。重新启动提示还有许多其他潜在原因。您可以注册需要重新启动才能正确取消注册的内容。与使用中的文件相同,但它可能涉及系统范围内的各种注册。
服务:使用中的文件的一个特例是服务。你的设置里有吗?很多时候,重新启动提示是由服务未正确关闭引起的。这可能是因为时间问题(停止速度太慢),或者安装程序中没有适当的命令用于卸载场景来停止服务,因为它应该在卸载时停止。
REINSTALLMODE:请注意,将REINSTALLMODE 属性为"amus"
- 强制覆盖(文件和注册表) - 已表明会导致许多 MSI 软件包在安装时出现更多重新启动提示(也会影响卸载,尽管我不经常看到它设置用于卸载)。
重启管理器:Windows 中有新功能可以处理重启问题。The overall idea is to prefer to shut down applications auto-magically with a restart parameter registered for the application to restart itself after the deployment operation - rather than triggering system reboots
. 这里有关于此功能的信息:
推荐阅读
- python - 如何使用 overpy 让 {{geocodeArea: xxx }} 查询在 python 中工作?
- mysql - 如何忽略mysql中的重复行
- reactjs - 子组件中未定义的道具值
- php - PHP 图像哈希精度建议
- javascript - 使用 jQuery 创建动态卡片内容
- apache - 来自 Apache 的 CGI,损坏的管道
- mysql - 选择总和大于或等于给定阈值的最小行数
- c# - 退一步所有调试点的关键
- java - 如何从 REST 服务(JavaFX、RestEasy、Spring Security)发送和接收数据
- excel - 如何使用 vba Excel 2010 从形状中提取 exif 数据?