【发布时间】:2015-08-05 08:24:37
【问题描述】:
我有一个正在运行的 Windows 服务更新另一个 Windows 服务。它通过卸载当前版本然后安装较新的版本来做到这一点。我们使用原始的 msi 安装程序和带有 Process.Start() 的 msiexec 来执行此操作。
Process msiexec = new Process();
msiexec.StartInfo.FileName = "msiexec";
msiexec.StartInfo.Arguments = "/quiet /i \"" + msiFileName + "\" /l*v \"" + msilogfile + "\"";
if (!msiexec.Start())
....etc... error handling code and such...
卸载正常,所以没问题。 安装,似乎也很顺利。我输出了 msi 安装日志。在日志中,它说它已成功安装。
然后我重新启动计算机,并在启动时,Windows 本身再次运行安装程序?然后它抱怨该服务当然已经存在并且一切都中断了......
Windows 决定在启动时运行安装程序的原因可能是什么?
这里需要注意的重要一点:如果我手动安装新版本,它可以工作,Windows 不会在启动时尝试安装它。所以它可能与 msiexec 有关?一些许可的事情?
【问题讨论】:
-
下次测试后检查
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager键下的PendingFileRenameOperations值,看看是否有任何条目。我怀疑在使用该服务时没有完成整个安装,因此在重新启动后操作系统会再次访问 MSI 以完成工作。 -
好的,我检查过了,但是密钥是空的。第二次重新启动后,它再次启动,这一次并抱怨该服务已经存在。它还给出了无法再找到 .InstallState 文件的错误。但我想这超出了范围,因为它现在有点乱了。
-
您在事件查看器中看到了什么?关于丢失的任何信息?另外,是否可以将您的安装日志上传到某个地方?
-
安装的时候,eventviewer里面没有什么奇怪的。但是,在启动时,在 windows 再次运行 msiinstaller 之前。我看到这些警告:检测产品“{347C9271-FA9D-4FA5-B447-776D168BB9D6}”,功能“DefaultFeature”在请求组件“{2BC8DA2C-6B6B-0B04-54F1-7BBD6C587269}”时失败检测产品“{347C9271 -FA9D-4FA5-B447-776D168BB9D6}',功能'DefaultFeature',组件'{605E6584-610F-4DAE-4C09-BD9495105253}'失败。资源“HKEY_CURRENT_USER\Software\MyCompany\MyProduct\Something\events”不存在。
-
对不起,我不知道如何在评论框中添加换行符。这些警告是否会导致 Windows 决定运行安装程序?
标签: c# windows-installer