服务依赖性导致我的 wix msi 在卸载时强制重启
Service dependencies are causing my wix msi to force a reboot on uninstall
过去 3 天 运行我一直在原地寻找系统强制重启的原因,但最终将其缩小到一个非常具体的原因。我有一个正在使用 Wix 开发的服务套件。有 10 个 msi,它们都与刻录安装结合在一起。由于这 10 次安装 运行,它们对之前安装的服务产生了依赖性。此安装的所有内容都运行良好,除了在服务启动和 运行ning 时将其卸载。其他人依赖它的服务告诉 Windows 需要重新启动,即使不需要(据我所知)。
使用参数“/norestart”调用引导程序会阻止静默卸载自动重启,但 windows 仍会进入 "don't do anything else until a reboot happens" 阶段,这更好,但并不理想。
有什么方法可以让我的 CulpritServiceInstall.msi 在物理上无法标记我的机器以进行重启?我知道这可能不是最好的解决方案,但我 90% 相信重启标志是根据 windows 安装程序的错误假设设置的(它担心某些服务需要重新启动,但他们已经从系统中清除)。
我可以 post 我的 wix wxs 文件给大家,如果有人认为可以帮助的话。
我的问题的验证:如果依赖服务在卸载期间未 运行ning,则一切正常。卸载似乎在卸载 1 开始时拍摄了服务状态的快照,并一直保留到最后。
编辑:BradFordrg 发现了我的问题。我以某种方式偏离了解决此问题的正确路径。我从来没有尝试过 运行 单独使用愤怒的 msi。我总是将它与我的依赖服务配对。我的测试太有偏见了。我本可以通过扫描 msi 日志中的单词 "reboot" 自己找到它,我以为我找到了,但显然没有。
没有根据错误的假设设置重新启动标志。
安装程序日志文件中的多个位置显示安装程序正在尝试删除文件,但由于文件被 1 个或多个进程锁定而无法删除:
592.MSI (s) (B0:58) [12:22:45:305]: Executing op: FileRemove(,FileName=asm-4.1.jar,,ComponentId={4E9A32EC-C065-4BA6-83C8-ADC327C94B12})
593.Info 1903.Scheduling reboot operation: Deleting file C:\Program Files\Data Indexer\elasticsearch\lib\antlr-runtime-3.5.jar. Must reboot to complete operation.
603.MSI (s) (B0:58) [12:22:45:305]: Executing op: FileRemove(,FileName=asm-commons-4.1.jar,,ComponentId={40A5E481-AA7E-45F6-A609-A65F2DFB8902})
604.Info 1903.Scheduling reboot operation: Deleting file C:\Program Files\Data Indexer\elasticsearch\lib\asm-4.1.jar. Must reboot to complete operation.
发生这种情况时,安装程序将使用 How can I force the deletion of locked files in C/C++? 中概述的技术将文件标记为删除并请求重新启动。
快速扫描安装程序日志显示这些文件已被锁定:
- C:\Program Files\Data Indexer\elasticsearch\lib\antlr-runtime-3.5.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\asm-4.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\asm-commons-4.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\groovy-all-2.3.2.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\jna-4.1.0.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\jts-1.13.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\log4j-1.2.17.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-analyzers-common-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-codecs-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-core-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-expressions-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-grouping-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-highlighter-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-join-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-memory-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-misc-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-queries-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-queryparser-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-sandbox-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-spatial-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-suggest-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\spatial4j-0.4.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\sigar\sigar-1.6.4.jar
根据文件类型,我们可以有根据地猜测 java 运行时环境负责。您可以通过使用 Microsoft 的 Process Explorer 找出哪些进程打开了文件来确认这一点。
过去 3 天 运行我一直在原地寻找系统强制重启的原因,但最终将其缩小到一个非常具体的原因。我有一个正在使用 Wix 开发的服务套件。有 10 个 msi,它们都与刻录安装结合在一起。由于这 10 次安装 运行,它们对之前安装的服务产生了依赖性。此安装的所有内容都运行良好,除了在服务启动和 运行ning 时将其卸载。其他人依赖它的服务告诉 Windows 需要重新启动,即使不需要(据我所知)。
使用参数“/norestart”调用引导程序会阻止静默卸载自动重启,但 windows 仍会进入 "don't do anything else until a reboot happens" 阶段,这更好,但并不理想。
有什么方法可以让我的 CulpritServiceInstall.msi 在物理上无法标记我的机器以进行重启?我知道这可能不是最好的解决方案,但我 90% 相信重启标志是根据 windows 安装程序的错误假设设置的(它担心某些服务需要重新启动,但他们已经从系统中清除)。
我可以 post 我的 wix wxs 文件给大家,如果有人认为可以帮助的话。
我的问题的验证:如果依赖服务在卸载期间未 运行ning,则一切正常。卸载似乎在卸载 1 开始时拍摄了服务状态的快照,并一直保留到最后。
编辑:BradFordrg 发现了我的问题。我以某种方式偏离了解决此问题的正确路径。我从来没有尝试过 运行 单独使用愤怒的 msi。我总是将它与我的依赖服务配对。我的测试太有偏见了。我本可以通过扫描 msi 日志中的单词 "reboot" 自己找到它,我以为我找到了,但显然没有。
没有根据错误的假设设置重新启动标志。
安装程序日志文件中的多个位置显示安装程序正在尝试删除文件,但由于文件被 1 个或多个进程锁定而无法删除:
592.MSI (s) (B0:58) [12:22:45:305]: Executing op: FileRemove(,FileName=asm-4.1.jar,,ComponentId={4E9A32EC-C065-4BA6-83C8-ADC327C94B12})
593.Info 1903.Scheduling reboot operation: Deleting file C:\Program Files\Data Indexer\elasticsearch\lib\antlr-runtime-3.5.jar. Must reboot to complete operation.
603.MSI (s) (B0:58) [12:22:45:305]: Executing op: FileRemove(,FileName=asm-commons-4.1.jar,,ComponentId={40A5E481-AA7E-45F6-A609-A65F2DFB8902})
604.Info 1903.Scheduling reboot operation: Deleting file C:\Program Files\Data Indexer\elasticsearch\lib\asm-4.1.jar. Must reboot to complete operation.
发生这种情况时,安装程序将使用 How can I force the deletion of locked files in C/C++? 中概述的技术将文件标记为删除并请求重新启动。
快速扫描安装程序日志显示这些文件已被锁定:
- C:\Program Files\Data Indexer\elasticsearch\lib\antlr-runtime-3.5.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\asm-4.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\asm-commons-4.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\groovy-all-2.3.2.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\jna-4.1.0.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\jts-1.13.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\log4j-1.2.17.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-analyzers-common-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-codecs-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-core-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-expressions-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-grouping-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-highlighter-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-join-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-memory-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-misc-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-queries-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-queryparser-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-sandbox-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-spatial-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\lucene-suggest-4.9.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\spatial4j-0.4.1.jar
- C:\Program Files\Data Indexer\elasticsearch\lib\sigar\sigar-1.6.4.jar
根据文件类型,我们可以有根据地猜测 java 运行时环境负责。您可以通过使用 Microsoft 的 Process Explorer 找出哪些进程打开了文件来确认这一点。