[英]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放弃了旧的安装项目,因此他们将其作为扩展重新带回:
我尚未对此进行测试,但是据我了解,它将带回内部VS安装项目类型的旧功能。
我已经使用VS2010设置项目编写了一些Windows服务,甚至编写了逐步说明。 有些步骤不是很容易解释,因此我自己将其用作服务项目的指南。
我使用WiX进行了一些首次测试,这似乎是一个不错的解决方案,但是我还没有将其用于服务安装。
关于此主题的另一个链接:
我计划很快查看有关使用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
如果将其设置为“用户”,则在安装过程中会弹出一个对话框,允许设置用户/密码
在解决方案上,右键单击=>添加=>新项目...
其他项目类型=> Visual Studio安装程序=>安装项目
名称:SampleServiceSetup
选择SampleServiceSetup项目,右键单击=>添加=>项目输出...
由于应该已经选择了项目“ SampleService =>主要输出”,因此应该已经选择了配置“(活动)”。
按确定
在属性视图中选择SampleServiceSetup项目:
默认情况下,安装项目的目标平台是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.