维克斯安装更换INSTSRV和SRVANY为用户定义的服务安装维克斯安装更换INSTSRV和SRVA

2019-05-12 07:29发布

我创建了使用Visual Studio C#Express中的可执行MyService.exe。 有在Express版本没有选项来创建服务。 在过去,这已被手动安装与使用中所描述的INSTSRV和SRVANY一个用户定义的服务MSDN文章“如何创建一个用户定义的服务”

是否有可能创建一个WiX的3.5安装此文件

  1. 不需要SRVANY.EXE和INSTRV.exe文件的存在,在目标机上
  2. 不使用INSTSRV.EXE作为自定义操作

Answer 1:

维克斯不支持安装Windows服务,但只有本地的。 这意味着应用程序必须写成服务 。

由于您的应用程序使用SRVANY.EXE作为服务运行,你有两个选择

  • 重写应用程序作为本机Windows服务

要么

  • 使用自定义操作来执行SRVANY.EXE和INSTSRV.EXE命令行


Answer 2:

这里是真正的独家新闻:服务是一种服务是一种服务。 这是我的座右铭。 我的意思是,我不关心,如果您使用的是C ++ EXE,一个VB EXE,一个C#EXE,一些置信转换主机EXE如SRVANY.EXE ......它们都实现了相同的API与服务交互控制管理。

所以SRVANY是会得到由单片机调用,并得到了启动命令。 在这一点上它要读取注册表值,并知道如何运行其他的EXE或脚本。 当SRVANY得到停止调用它会终止你的流程和报告停下​​来的SCM。

这就是如何服务运行。 让我们来谈谈如何安装它。 有许多方式,你可以以编程方式创建服务(SC,INSTSRV.EXE,安装类自定义操作等),但是从他们的角度来看MSI没有一个是曾经需要。 Windows安装程序具有随着标准的行动来处理启动,停止,创建和删除Windows服务,则ServiceInstall和的ServiceControl表。 偶尔,如与SRVANY.EXE的情况下,你得到一些不能使用这些表来表示安装要求和在这种情况下,你使用注册表表。 对于SRVANY.EXE这是创建与教SRVANY.EXE启动时实际上所谓的注册表数据的参数项的要求。

下面是使用SRVANY.EXE运行脚本的NodeJS作为服务在维克斯的例子:

<Component Id="c1" Guid="redacted">
  <File Id="f1" Source="$(var.SourceDir)\srvany.exe" KeyPath="yes" />
  <ServiceInstall Id="si1" DisplayName="MyService" Description="MyService" Name="MyService" Start="auto" Type="ownProcess" Vital="no" ErrorControl="normal" Account="NT AUTHORITY\NetworkService"  />
  <ServiceControl Id="sc1" Name="MyService" Remove="both" Stop="both" Start="install" Wait="yes" />
  <RegistryValue Id="reg1" Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\MyService\Parameters" Name="Application" Type="string" Value="node &quot;[#f2]&quot;" Action="write" />
</Component>
<Component Id="c2" Guid="redacted" KeyPath="yes">
  <File Id="f2" Source="$(var.SourceDir)\server.js" />
</Component>


文章来源: Wix installer to replace INSTSRV and SRVANY for user defined service installation