使用WiX安装使用.NET创建的服务
本文关键字:创建 服务 NET WiX 安装 使用 | 更新日期: 2023-09-27 17:58:26
我正在尝试使用VS2012 express创建一个服务,该服务将与WiX一起安装。这是在没有完整版本VS中提供的模板的情况下完成的。我让我的类从ServiceBase派生。我认为(也许是错误的)如果程序是使用WiX安装的,那么从ServiceInstaller派生的类是不必要的。当我运行由WiX创建的MSI时,不会标记任何错误,但不会显示任何新服务。
我在谷歌上搜索过答案,但没有找到创建服务所需的miniumumC#代码的例子。链接到一个好的教程或指出C#或WiX代码缺乏的领域将不胜感激。
模板服务的代码是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceProcess;
namespace WixInstalledServiceTeamplate
{
class BasicService : ServiceBase
{
static void Main(string[] args)
{
}
public BasicService()
{
this.AutoLog = true;
this.ServiceName = "MY Service Template";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
//TODO: place your start code here
}
protected override void OnStop()
{
base.OnStop();
//TODO: clean up any variables and stop any threads
}
}
}
Wix代码:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="786F7069-9C7F-4E15-A721-6B3B4D300FD9" Name="WixEditText" Language="1033" Version="0.0.0.1" Manufacturer="3M Automated Inpsection and Measurement" UpgradeCode="31956530-98A2-4C83-B3A9-5FB6B7A7AE07">
<Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="RELEASE" Name="Release">
<Component Id="WIXINSTALLEDSERVICETEAMPLATE.EXE" DiskId="1" Guid="B0AEF920-4EF0-478C-9B5A-0B13F23F7E73">
<File Id="WIXINSTALLEDSERVICETEAMPLATE.EXE" Name="WixInstalledServiceTeamplate.exe" Source="bin'Release'WixInstalledServiceTeamplate.exe" />
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id="Complete" Title="Install Everything" Level="1" Display="expand" ConfigurableDirectory="TARGETDIR">
<Component Id="MYServiceTemplate" Guid="1BD8DA93-86A6-4DC4-8CE9-B59525DDFB89" Directory="TARGETDIR">
<ServiceInstall Name="myservicetemplate" Type="ownProcess" Start="demand" ErrorControl="normal" Account="LOCAL SYSTEM" Description="test service install with wix" DisplayName="MY Service Template" Id="serviceInstall">
</ServiceInstall>
</Component>
<ComponentRef Id="WIXINSTALLEDSERVICETEAMPLATE.EXE" />
</Feature>
<UI />
<UIRef Id="WixUI_Minimal" />
</Product>
</Wix>
您认为只需要ServiceBase的假设是正确的。然而,在WiX中,您只需要1个组件,而不需要2个组件。ServiceInstall不引用文件,而是隐式应用于父组件的密钥文件。
如果你需要安装EXE和控制台应用程序和/或变得更复杂的服务(变体点)的能力。最简单的方法是考虑到一个DLL,创建2个EXE,共有3个组件。