服务依赖性导致我的wix msi强制重新启动卸载

时间:2015-06-11 18:06:07

标签: wix windows-installer

我在过去的3天里一直在运行,同时追踪我系统上强制重启的原因,但最终将其缩小到一个非常具体的原因。我有一个我在Wix工作的服务套件。有10个msi都与刻录安装一起保存。当这10个安装运行时,它们会在它们之前安装的服务上创建依赖关系。除了在服务启动和运行时卸载它之外,此安装上的所有内容都很有效。有其他人依赖它的服务告诉Windows重新启动是必要的,即使它不是(据我所知)。

使用参数' / norestart'调用引导程序。停止静态卸载自动重启,但是Windows仍然会在“重新启动发生之前不做任何其他事情”#34;阶段哪个更好,但不理想。

有没有办法让我的CulpritServiceInstall.msi在物理上无法标记我的机器重启?我知道这可能不是最好的解决方案,但我90%确信重启标志是由Windows安装程序设置的错误假设(它担心某些服务需要重新启动,但它们已从系统中清除)。

如果有人认为可以提供帮助,我可以为所有人发布我的wix wxs文件。

验证我的问题:如果在卸载期间依赖服务没有运行,一切都很顺利。似乎卸载会拍摄服务的快照。卸载1开始时的状态,并保持到最后。

编辑:BradFordrg找到了我的问题。我以某种方式远离正确的道路来解决这个问题。我从来没有试过单独运行愤怒的msi。我总是将它与我​​的依赖服务配对。我的测试太偏见了。我本可以通过扫描msi日志来找到这个单词" reboot"我认为我做过,但显然没有。

1 个答案:

答案 0 :(得分:3)

重启标志未在错误假设下设置。

安装程序日志文件中有多个位置显示安装程序正在尝试删除文件,但由于文件被一个或多个进程锁定,因此无法执行此操作:

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确认打开文件的进程来确认这一点。