错误:使用WiX工具集为Windows服务创建新的安装程序。无法安装该服务。得到错误
Error screenshot
我想创建一个安装Windows服务的MSI。
Windows服务已在services.msc
中安装并可见停止并删除该服务。
我的Windows服务有很多依赖项,在运行服务时要使用。
我已将所有文件添加为组件,并为每个组件ID添加了ServiceDependency
,但仍无法解决错误。事件查看器中的错误也与上面的屏幕截图相同。
欢迎提出任何指示。
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />
<Feature Id="ProductFeature" Title="LayoutSwitcher" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="LayoutSwitcher" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="PlcmLayoutSwitcherWinSvc.exe" Guid="PUT_GUID_HERE" KeyPath="yes">
<File Id="LayoutSwitcherWinSvc.exe"
Name="LayoutSwitcherWinSvc.exe" Source="$(var.LayoutSwitcherWinSvc_TargetDir)LayoutSwitcherWinSvc.exe" />
<CreateFolder />
<ServiceInstall Id="LayoutSwitcher" Type="ownProcess" Vital="yes"
Name="LayoutSwitcher" DisplayName="LayoutSwitcher"
Description="LayoutSwitcher" Start="auto" Account="NT AUTHORITY\LocalSystem"
ErrorControl="ignore" Interactive="no">
<ServiceControl Id="StartService" Start="install" Stop="both"
Remove="uninstall" Name="LayoutSwitcher" Wait="yes" />
</Component>
<Component Id="logoicon.ico" Guid="PUT_GUID_HERE">
<File Id="logoicon.ico" Name="logoicon.ico" Source="$(var.LayoutSwitcherWinSvc_ProjectDir)logoicon.ico" />
</Component>
<Component Id="LayoutSwitcherWinSvc.exe.config" Guid="PUT_GUID_HERE">
<File Id="LayoutSwitcherWinSvc.exe.config" Name="LayoutSwitcherWinSvc.exe.config" Source="$(var.LayoutSwitcherWinSvc_TargetDir)LayoutSwitcherWinSvc.exe.config" />
</Component>
<Component Id="Transactions.dll" Guid="PUT_GUID_HERE">
<File Id="Transactions.dll" Name="Transactions.dll" Source="$(var.LayoutSwitcherWinSvc_TargetDir)Transactions.dll" />
</Component>
<Component Id="Transactions.Cfg.dll" Guid="PUT_GUID_HERE">
<File Id=" Transactions.Cfg.dll" Name="Transactions.Cfg.dll" Source="$(var.LayoutSwitcherWinSvc_TargetDir) Transactions.Cfg.dll" />
</Component>
删除服务依赖项后更新了源代码,但仍然收到相同的错误。
删除了空格,但仍然收到相同的错误。
附加了详细日志。请从以下链接下载。
http://www.yourfilelink.com/get.php?fid=1432133
答案 0 :(得分:4)
您的ServiceDepenency元素似乎列出了您的服务的可执行文件所依赖的dll和其他文件。这不是ServiceDependency元素的用意。它应该列出必须在此服务之前启动的其他服务。您收到的错误可能是由于 LayoutSwitcherWinSvc.exe.config 以及您列出的所有 * .dll 文件不是目标上安装的服务的名称机。
修复可能会删除这些ServiceDependency元素。然后,仅当您的服务依赖于其他服务时,请按名称为这些服务添加ServiceDependency元素。
解决了该部分后,您的ServiceInstall和ServiceControl元素仍然不正确。特别是, Name 属性不匹配。在您的示例代码中,您看起来在许多元素中包含前导空格,我会删除它。但是,即使这只是复制和粘贴的勘误表,安装的 LayoutSwitcher 也不同于中间某些空格的布局切换器。
这与您在评论中提到的错误0x80070424匹配,为0x424 = 1060, net helpmsg 1060 报告:
指定的服务不作为已安装的服务存在。
确保 ServiceInstall / @ Name 和 ServiceControl / @ Name 属性与手动启动服务时使用的属性相匹配。 (请注意,如果您的手动测试在命令行中,则很可能会隐式删除任何空格。)
答案 1 :(得分:4)
尝试在安装和控件中使两个Name属性完全相同。他们需要完全匹配,而不是。您正在尝试启动不存在的服务。
答案 2 :(得分:4)
您的留言:
&#34;无法存储错误0x80070424的ACL回滚信息;错误0x80070424:无法获取对象的安全信息; CustomAction ExecSecureObjects返回实际错误代码1603&#34;
与服务无关。理想情况下,您应该关闭此问题,因为服务问题已解决,您现在有一个单独的问题,由该错误消息描述。
不知何故,您已设法调用WiX自定义操作&#34; ExecSecureObjects&#34;这与您的服务无关。在WiX的某处,您正尝试使用WiX util扩展中的PermissionEx来保护某些对象。这是你现在看到的问题。
答案 3 :(得分:3)
你可以试试这段wix代码吗?我清理了一下以删除一些默认值。
除非您想要使用不同的文件名放置文件,否则您不需要Name属性。
如果您希望自己的服务作为本地系统运行,则需要设置空帐户。如果您希望它以特定用户身份运行,那么您可以在命令行上设置属性SVCACCOUNT = someuser SVCPASSWORD =&#34; password&#34;,否则只需跳过它们。
如果名称和标识相同,则可以跳过标识。
我更喜欢在多个地方使用变量来避免拼写错误,例如我在ServiceInstall和ServiceControl中使用的ServiceName:
<WixVariable Id="ServiceName" Value="LayoutSwitcher" />
<Component Id="PlcmLayoutSwitcherWinSvc.exe" Guid="PUT_GUID_HERE">
<File Id="LayoutSwitcherWinSvc.exe" Source="$(var.LayoutSwitcherWinSvc_TargetDir)LayoutSwitcherWinSvc.exe" KeyPath="yes" />
<ServiceInstall Name="!(wix.ServiceName)"
DisplayName="LayoutSwitcher"
Description="LayoutSwitcher"
ErrorControl="ignore"
Type="ownProcess"
Vital="yes"
Start="auto"
Account="[SVCACCOUNT]"
Password="[SVCPASSWORD]"
Interactive="no" />
<ServiceControl Id="ServiceControl_!(wix.ServiceName)"
Name="!(wix.ServiceName)"
Start="install"
Stop="both"
Remove="uninstall"
Wait="yes" />
</Component>
您附加的日志不完整,一直运行安装程序并仅在您关闭安装程序后附加日志。不需要IMO调试日志。