繁体   English   中英

使用WiX进行MajorUpgrade后无法启动Windows服务

[英]Failing to start Windows service after a MajorUpgrade with WiX

我有一个非常简单的WiX项目。 没有什么花哨。 尝试对现有安装执行MajorUpgrade时,它无法启动服务,因此不可避免地回滚到以前的版本并正常启动服务。 我已经删除了Start="install"并成功手动启动了该应用程序,因此我知道这不是依赖性问题。

我进行了无休止的搜索,没有找到解决问题的答案。

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallFinalize" />

我的服务安装:

<ServiceInstall
        Id="ServiceInstaller"
        Type="ownProcess"
        Name="LsdnService"
        DisplayName="Lsdn Service"
        Description="Placeholder for now."
        Start="auto"
        Account="[SERVICEACCOUNT]"
        Password="[SERVICEPASSWORD]"
        ErrorControl="normal"/>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="LsdnService" Wait="yes" />

我将MSI日志转储到文件中并收到此错误,但它非常模糊。

MSI (s) (18:48) [22:41:27:349]: Note: 1: 2205 2:  3: Error 
MSI (s) (18:48) [22:41:27:349]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1920 

在安装过程中对注册表进行了一些修改。 安装程序尝试从注册表中读取并继承已经存在的值。

<Property Id="LSDNADDRESS" Value="127.0.0.1">
  <RegistrySearch Id="LsdnAddressProperty" Root="HKLM" Key="$(var.RegistryKey)" Name="LsdnAddress" Type="raw" />
</Property>
<Property Id="LSDNPORT" Value="9920">
  <RegistrySearch Id="LsdnPortProperty" Root="HKLM" Key="$(var.RegistryKey)" Name="LsdnPort" Type="raw" />
</Property>
<Property Id="LSDNKEY" Value="6f380b07-0b54-4904-8303-95d1ec45d453">
  <RegistrySearch Id="LsdnKeyProperty" Root="HKLM" Key="$(var.RegistryKey)" Name="LsdnKey" Type="raw" />
</Property>

调试结果 :经过大量调试(由原始海报-OP进行),结果证明是此处描述的已知MSI问题: https : //wix-users.narkive.com/EMfQPDrM/a-bug-get-reg-sz -使用类型整数时 不错的搜索工作。

DWORD中有什么? (显然是REG_SZ ):本质上,MSI在升级安装过程中将通过RegistrySearch操作找到的DWORD值“转换”为格式化的字符串REG_SZ (可能涉及更多)。 这会导致期望DWORD值的服务在重大升级期间在启动时掉落。 一个非常奇怪的错误

解决方法 :通过使服务代码能够读取DWORDREG_SZ可以尝试“解决”此问题。 与在自定义操作中解决问题相比,这提供了一种更健壮的解决方案,因为只要其中有代码(这是存在的代码,就会向其他开发人员发出有关该问题的警报),它便是“永久性”修复程序。 或者也许只使用REG_SZ


快速检查 :很明显,请检查服务密码并登录 事件查看器中有任何内容吗? Windows键 +点击R + eventvwr.msc + Enter 如何使用事件查看器对Windows Service问题进行故障排除 也许您可以尝试对之前和之后的文件夹进行文件夹比较 ,看看是否在配置文件中看到了意外情况? 自然会有很多二进制差异,但是请检查文本文件(也可以编码)。 再次检查MSI日志文件 ,然后按照此处所述搜索"value 3"检查MSI日志文件的提示 Manually copy the new files in place and attempt to start the service via the services.msc applet


服务专家Windows服务常见问题解答(FAQ) 内容似乎是最新的-至少以面值计。 这些家伙自称是服务专家。 我不知道他们是谁。

查看上方链接中的“错误”部分 以下是一些摘录:


通用检查清单 :如果以上都不做任何事情,请尝试以下"torpedoes full spread" check-lists (只是开始调试的想法):


通用调试 :抛出一些通用调试方法。


其他链接

当然,这可能是一个依赖性问题。 例如,GAC / WinSXS文件直到StartServices之后的提交阶段才安装到GAC中。

我将把Start =“ Install”留在其中,当它坐在无法启动的提示下,检查计算机的状态并手动调试服务启动。 我敢打赌,您会发现缺少的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM