ToB企服应用市场:ToB评测及商务社交产业平台

标题: Visual Studio打包windows服务并实现自动注册与开启 [打印本页]

作者: 我可以不吃啊    时间: 2023-10-8 06:03
标题: Visual Studio打包windows服务并实现自动注册与开启
前提

已经创建并编写好了windows服务程序,且下载了Microsoft Visual Studio Installer Project插件。
创建windows服务程序的参考链接:https://blog.csdn.net/xiketangAndy/article/details/126851864
打包步骤

1. 创建打包项目

右键windows服务项目所在的解决方案,搜索setup并创建Setup Project项目。
[img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190603504-2063670972.png[/img][img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190646894-1961475572.png[/img]
2. 添加应用程序所需文件

右键Application Folder,选择Add->项目输出。选择主输出为编写好的windows服务程序(vs会自动将程序依赖的dll文件一起放进去),配置选Release Any Cpu。
[img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190737683-24401635.png[/img][img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190743867-1779764426.png[/img]
继续向Application Folder添加下述文件(右键选择Add->文件)。
  1. dim obj
  2. rem run方法有三个参数,分别表示命令/脚本路径、cmd窗口运行模式、是否等待该命令执行结束后再继续执行
  3. set obj = CreateObject("Wscript.Shell")
  4. rem 注册windows服务,0表示后台无窗口运行(即安装时不弹出黑框框)
  5. rem obj.Run "InstallUtil.exe MyWindowsService.exe", 0, True
  6. rem 启动windows服务
  7. obj.Run "net start GetMacByHttpService", 0
复制代码
注:将运行InstallUtil.exe的命令放在脚本中执行时会有问题(解决方案在下面),最后生成的安装包在安装时会报错,原因应该是安装未完成时InstallUtil.exe找不到当前路径。
3. 添加自定义操作

右键新建的打包项目,选择view->自定义操作。在Custom Actions界面下右键Install,添加自定义操作。
[img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190827158-818173616.png[/img][img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190834163-1116902935.png[/img]
选中第2步中向Application Folder中添加的所有文件,点击OK确认。
[img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190906881-1480464706.png[/img][img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190900291-388715499.png[/img]
右键添加进来的InstallUtil.exe,选择属性。修改Arguments的内容为:“ MyWindowsService.exe”,注意前面有个空格。MyWindowsService.exe是自己编写的windows服务程序名。
[img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190918345-1926710136.png[/img][img=50%,50%]https://img2023.cnblogs.com/blog/3278411/202309/3278411-20230927190926039-645668442.png[/img]
后续也可以在Uninstall中添加卸载时执行的动作,过程类似。移除windows服务的命令为:
  1. rem 移除MyWindowsService服务
  2. InstallUtil.exe -u MyWindowsService.exe
复制代码
4. 打包生成

先生成已编写好的windows服务程序,后右键Setup项目,点击生成。最后可以得到一个exe文件和msi文件,经测试,exe文件可以删除且不影响安装,仅保留msi文件即可。
踩过的坑


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4