我有一个非常简单的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>
答案 0 :(得分:1)
调试结果 :经过大量的调试(由原始发布者-OP进行),结果证明这是此处描述的MSI已知问题: https://wix-users.narkive.com/EMfQPDrM/a-bug-get-reg-sz-when-using-type-integer。很好的搜索工作。
DWORD中有什么? (显然是
REG_SZ
):本质上,MSI可以“转换”一个 {通过DWORD
找到的{1}} 值 升级过程中对格式化字符串-RegistrySearch
的操作 安装(也可能会涉及更多)。这导致服务 预期REG_SZ
的值会在专业期间启动时下降 升级。 一个非常奇怪的错误。解决方法 :通过使服务代码既可以读取
DWORD
,又可以读取服务代码,可以尝试“解决”此问题。DWORD
。 这比在计算机上解决问题提供了更可靠的解决方案。 自定义操作,因为只要代码在其中,它就是“永久性”修复 那里(代码的存在提醒其他开发人员有关 问题)。还是只使用REG_SZ
?
快速检查 :显然,请检查服务密码并登录。任何东西 事件查看器? Windows键 +点击 R +
REG_SZ
+ 输入。 How to use the Event Viewer to troubleshoot problems with a Windows Service。也许您可以尝试在文件夹之前和之后进行文件夹差异,看看您是否在其中发现了意外情况 配置文件?自然会有很多二进制 差异,但请检查文本文件(还可以编码)。检查 MSI日志文件 再次搜索eventvwr.msc
,如下所述:Tips For Checking MSI Log Files。"value 3"
。
服务专家 :Windows Services Frequently Asked Questions (FAQ)。内容似乎是最新的-至少以面值计。 这些家伙自称是服务专家。我不知道他们是谁 是。
查看上方链接中的“错误”部分。这里有一些 提取物:
通用检查清单 :如果以上都不做任何事情,请尝试以下 Manually copy the new files in place and attempt to start the service via the services.msc applet
(只是开始调试的想法) ):
通用调试 :引入了一些通用调试方法。
一些其他链接 :
答案 1 :(得分:1)
这肯定是一个依赖性问题。例如,只有在StartServices之后的提交阶段才将GAC / WinSXS文件安装到GAC中。
我将把Start =“ Install”留在其中,当它位于无法启动的提示时,请检查计算机的状态并手动调试服务启动。我敢打赌,您会发现缺少的东西。