gpt4 book ai didi

c# - 使用 WiX 作为 Windows 服务安装 .NET Core 3.0 Worker 服务

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:52 25 4
gpt4 key购买 nike

随着 .NET Core 3 的新版本,我正在尝试使用新的辅助服务模板创建一个 Windows 服务。我需要能够使用组策略安装它,而 WiX 似乎是完成这项工作的工具。

我已经创建了 .wxs 文件并且没有指定 ServiceInstall 部分,它安装正常。

这是我的文件:已更新

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SystemInformationService" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="f08191cf-461e-481b-a2a1-6f54d6ae5331">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

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

<!-- Embed cab files, don't include them in the output -->
<MediaTemplate EmbedCab="yes"/>

<!-- Default WiX dialog set -->
<UIRef Id="WixUI_Mondo" />

<!-- License agreement -->
<WixVariable Id="WixUILicenseRtf" Value="LicenseAgreement.rtf" />

<Feature Id="ProductFeature" Title="SystemInformationService.Setup" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentGroupRef Id="HeatGenerated" />
</Feature>
</Product>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="SystemInformationService" />
</Directory>
</Directory>
</Fragment>

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<Component Id="ProductComponent" Guid="5BB7300D-C29F-4C87-B461-AAE3AA4EB56D">
<CreateFolder/>
<!--<File Source="$(var.SystemInformationService.TargetPath)" />-->
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Name="SystemInformationService"
DisplayName="System Information Service"
Description="System Information service by MyCompany"
Start="auto"
Vital="no"
Account="LocalSystem"
Interactive="no"
ErrorControl="normal" />
<ServiceControl
Id="ServiceInstaller"
Start="install"
Stop="both"
Remove="uninstall"
Name="SystemInformationService"
Wait="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>

现在我正在尝试添加服务组件,以便它在安装时启动。添加后运行安装程序时,安装程​​序 UI 卡在“正在启动服务...”上。我尝试添加“开始”参数,因为我在另一个答案中看到了这一点。

我在想,既然这是 .net 核心,我可能需要添加一个 Action .exe 或其他东西来启动服务。这就是我能想到的 - 任何建议都会有所帮助。

谢谢

更新:我已将 .wxs 文件更新为我现在拥有的文件,并且我已使用依赖于框架的部署正确安装了它。我的问题是指定 AnyCPU 而不是 x86。但是......现在当我切换到独立部署时,我遇到了与以前相同的错误。所以这一定与我发布 .net 核心的方式有关。

这是我当前的发布配置文件。当我切换到依赖框架时,安装程​​序运行良好并启动服务。 This is my publish profile currently. When i switch to framework dependent the installer runs fine and starts the service.

最佳答案

想通了。我缺少的是服务的 .exe 必须在 .wxs 中的“ServiceInstall”和“ServiceControl”标签上方定义。所以我需要做的是创建一个过滤器.xslt 来过滤掉热生成文件中的.exe,然后在ServiceInstall 上方的Service 组件(keypath='yes')中添加一个标签。

下面是我最终的 .wxs 和 .xslt

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SystemInformationService" Language="1033" Version="1.0.2.0" Manufacturer="MyCompany" UpgradeCode="f08191cf-461e-481b-a2a1-6f54d6ae5331">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="f08191cf-461e-481b-a2a1-6f54d6ae5331">
<UpgradeVersion
Minimum="1.0.0" Maximum="99.0.0"
Property="PREVIOUSVERSIONSINSTALLED"
IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
<MajorUpgrade DowngradeErrorMessage="A newer version of System Information Service is already installed." />

<!-- Embed cab files, don't include them in the output -->
<MediaTemplate EmbedCab="yes"/>

<!-- Default WiX dialog set -->
<UIRef Id="WixUI_Minimal" />

<!-- License agreement -->
<WixVariable Id="WixUILicenseRtf" Value="LicenseAgreement.rtf" />

<Feature Id="ProductFeature" Title="SystemInformationService.Setup" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentGroupRef Id="HeatGenerated" />
</Feature>

<!--<CustomAction Id="installService" Directory="INSTALLFOLDER" Execute="commit" ExeCommand="sc create SystemInformationService binPath=INSTALLFOLDER/SystemInformationService.exe" Return='ignore'/>
<CustomAction Id="testAction" Directory="INSTALLFOLDER" Execute="commit" ExeCommand="notepad.exe test.txt" Return='ignore'/>
<CustomAction Id="startService" Directory="INSTALLFOLDER" Execute="commit" ExeCommand="sc start binPath=INSTALLFOLDER/SystemInformationService.exe" Return='ignore'/>-->

</Product>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="SystemInformationService" />
</Directory>
</Directory>
</Fragment>

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<Component Id="ProductComponent" Guid="5BB7300D-C29F-4C87-B461-AAE3AA4EB56D">
<!--<File Source="$(var.SystemInformationService.TargetPath)" />-->
<!--<CreateFolder/>-->
<File Id="SystemInformationService" KeyPath="yes" Source="..\SystemInformationService\bin\Release\netcoreapp3.0\win-x86\SystemInformationService.exe"/>
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Name="SystemInformationService"
DisplayName="System Information Service"
Description="System Information service by MyCompany"
Start="auto"
Account="LocalSystem"
ErrorControl="normal" />
<ServiceControl
Id="ServiceInstaller"
Start="install"
Stop="both"
Remove="uninstall"
Name="SystemInformationService"
Wait="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">

<xsl:output method="xml" indent="yes" />

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<xsl:key name="exe-search" match="wix:Component[contains(wix:File/@Source, 'SystemInformationService.exe')]" use="@Id" />

<xsl:template match="wix:Component[key('exe-search', @Id)]" />
<xsl:template match="wix:ComponentRef[key('exe-search', @Id)]" />

</xsl:stylesheet>

关于c# - 使用 WiX 作为 Windows 服务安装 .NET Core 3.0 Worker 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58084086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com