[英]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
值的服务在重大升级期间在启动时掉落。 一个非常奇怪的错误 。解决方法 :通过使服务代码能够读取
DWORD
和REG_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.