繁体   English   中英

C#如何在应用程序安装过程中安装Windows Service

[英]C# How to install Windows Service as part of application installation

我创建了一个安装程序,该安装程序从选定的子项目中获取主要输出,组成我的应用程序的子项目之一是Windows服务。 该服务需要作为主应用程序的一部分进行安装。

到目前为止,我已经尝试将一个安装程序添加到Service项目中,分别发布并安装生成的Setup.exe作为项目安装程序的自定义操作,但是此方法没有成功。 我可以从命令行安装东西,但是我需要将其打包在Visual Studio CMD Tool中才能访问installutil命令。

我的问题是,我可以作为较大项目的一部分从“ Visual Studio安装程序-安装项目”安装Windows服务吗? 到目前为止,这个过程使我望而却步。

我想我可以尝试让自定义操作触发一个脚本,该脚本将在执行过程中执行ServiceInstaller,因此,我将尝试这样做。

提前致谢

由于VS2013不包含旧的(VS2010)Visual Studio安装程序项目,因此我有以下建议:

使用WiX安装程序: https ://wix.codeplex.com

甚至还有一个服务安装程序模板(未经测试):

https://visualstudiogallery.msdn.microsoft.com/7f35c8ce-1763-4340-b720-ab2d359009c5


使用VS 2013安装扩展

有许多抱怨说MS放弃了旧的安装项目,因此他们将其作为扩展重新带回:

http://blogs.msdn.com/b/visualstudio/archive/2014/04/17/visual-studio-installer-projects-extension.aspx

我尚未对此进行测试,但是据我了解,它将带回内部VS安装项目类型的旧功能。


我已经使用VS2010设置项目编写了一些Windows服务,甚至编写了逐步说明。 有些步骤不是很容易解释,因此我自己将其用作服务项目的指南。

我使用WiX进行了一些首次测试,这似乎是一个不错的解决方案,但是我还没有将其用于服务安装。

关于此主题的另一个链接:

https://superuser.com/questions/727643/installing-a-windows-service-without-visual-studios-installutil-exe

我计划很快查看有关使用VS2013安装服务的分步说明,并且可能将其与WiX进行比较,如果您有兴趣,请告诉我,我可以将其公开发布。


这是我创建Windows服务的分步说明。 (您也可以在http://www.rsprog.de/samplewindowsservice上找到它)

  • 文件=>新建=>项目...

  • Visual C#=> Windows桌面=> Windows服务

  • 名称:SampleService

  • 选中“创建解决方案目录”

  • 在解决方案资源管理器中,选择Service1.cs,右键单击=>重命名

  • 将文件重命名为SampleService.cs

  • 为“ ...您是否还要执行重命名...”选择是。

SampleService.cs应该立即显示在“设计视图”中

  • 单击设计器视图的背景

  • 右键单击=>添加安装程序

(已添加serviceProcessInstaller1和serviceInstaller1)

  • 在设计视图中打开SampleService.cs

  • 在属性中,将ServiceName设置为SampleService

  • 在设计视图中打开ProjectInstaller.cs

  • 点击serviceInstaller1

  • 在“属性”窗口中,将ServiceName属性设置为SampleService。

  • 将DisplayName属性设置为Sample Service或其他名称(稍后将在服务控制台中显示为服务名称)

  • 您还可以在此处将StartType从手动设置为自动

  • 单击serviceProcessInstaller1

  • 编辑帐户:您可以在此处更改服务是在技术帐户(用户)下还是以LocalSystem身份运行

如果将其设置为“用户”,则在安装过程中会弹出一个对话框,允许设置用户/密码

  • 在解决方案上,右键单击=>添加=>新项目...

  • 其他项目类型=> Visual Studio安装程序=>安装项目

  • 名称:SampleServiceSetup

  • 选择SampleServiceSetup项目,右键单击=>添加=>项目输出...

  • 由于应该已经选择了项目“ SampleService =>主要输出”,因此应该已经选择了配置“(活动)”。

  • 按确定

  • 在属性视图中选择SampleServiceSetup项目:

  • 将InstallAllUsers更改为True
  • 将ProductName更改为SampleService(最后删除安装程序)
  • 将标题更改为SampleService(最后删除安装程序)

默认情况下,安装项目的目标平台是x86。 您可以在此处将其更改为x64(TargetPlatform)

  • 在解决方案资源管理器=>视图=>自定义操作中右键单击安装项目

  • 在“定制动作”视图中,右键单击“定制动作”节点=>“添加定制动作...”。

  • 双击列表中的“应用程序文件夹”将其打开,从SampleService(活动)中选择“主要输出”,然后单击“确定”。 (“ SampleService的主要输出(活动)”已添加到四个节点)

  • 选择SampleServiceSetup项目,右键单击=>视图=>用户界面

  • 开始=>安装文件夹=>属性=> InstallAllUsersVisible:更改为False

  • 建立解决方案

Windows Installer具有一个互斥锁,可以防止同时运行多个安装。 因此,一个安装程序无法调用另一个安装程序。 对此有一个例外,但是生成的模式不能静默安装,也不是最佳实践。

您需要研究引导程序/链接程序的概念。 InstallShield有一个被称为套件安装程序的程序,而Windows Installer XML(WiX)有一个称为刻录程序的程序。

Windows Installer专家还以其低质量而闻名Visual Studio Installer项目。 我会考虑使用其他工具(例如WiX)重写该安装程序。 我维护着一个名为Industrial Strength Windows Installer XML(IsWiX-CodePlex)的开源项目,该项目提供了项目模板(脚手架)和图形设计器,使创作无需安装手工XML的MSI即可安装服务。 然后,由WiX构建生成的项目以创建MSI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM