【发布时间】:2019-09-24 15:53:16
【问题描述】:
随着 .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 核心,我可能需要添加一个动作 .exe 或其他东西来启动服务。这就是我能想到的 - 任何建议都会有所帮助。
谢谢
更新:我已将 .wxs 文件更新为我现在拥有的文件,并且我已通过依赖于框架的部署正确安装它。我的问题是指定 AnyCPU 而不是 x86。但是...现在,当我切换到独立部署时,我遇到了与以前相同的错误。所以这一定与我发布 .net 核心的方式有关。
【问题讨论】:
-
感谢 Stein,我发现如果我使用依赖于框架的框架,它可以在我的机器上运行(因为我显然安装了 .net 核心)但是当我切换到自包含时它再次失败(即使在我的机器)。
-
我从未编写过 .net 核心 Windows 服务,因此可以归结为:.NET Core 是否真的像在 .NET 的 ServiceBase 中那样创建一个可以响应 ServiceStart ServiceStop 事件或它基本上只是作为工作人员运行的控制台应用程序吗?如果答案是后者,则需要使用 SrvAny 或 NSSM 之类的东西作为托管层。
-
是的,克里斯,我也这么想。现在没时间看,但这里有一些链接供参考:
Host ASP.NET Core in a Windows Service、.NET Core application deployment。 -
你愿意尝试我的开源项目吗?遵循“windows 服务”教程,除了使用 .net 核心而不是 .net 框架来创建您的服务并查看它是否正常工作。根据您上次评论中的链接,我希望它应该这样做。 github.com/iswix-llc/iswix-tutorials