为 Windows 服务创建部署项目需要哪些必要项目?在安装新版本之前,我需要卸载以前版本的服务。
5 回答
MSDN 有一个关于创建 Windows 服务和安装程序的教程。
我将 NSIS 用于我的应用程序,而要安装服务,您只需使用 sc 命令:
ExecWait 'sc create MyService binpath= "$INSTDIR\MyService.exe"'
ExecWait 'sc start MyService'
对于卸载:
ExecWait 'sc stop MyService'
ExecWait 'sc delete MyService'
效果很好。
这几乎只是调用:
net stop "MyService"
intallutil.exe /u MyService.exe
// Copy your exe into place
installutil.exe MyNewService.exe
// optional
net start "MyService"
这将停止旧服务,将其卸载,然后将新服务复制到位,安装它,然后(可选)启动它。
大多数安装程序使这很容易。唯一的另一个“问题”是确保您的安装程序被限制安装到本地驱动器,而不是网络路径,如果要安装该服务以在启动时自动运行。
在 Visual Studio 中,转到服务项目中的服务文件(myservice.vb 或 myservice.cs)。
右键单击设计视图,然后选择属性。
在 Porperties 窗口的底部有一个 Add Installer 链接。点击它。
检查 ServiceInstaller 和 ServiceProcessInstaller 属性。
编译你的项目
要卸载以前的版本,请在命令提示符下运行:Installutil.exe /uc:\myfolder\myservicefile.exe
要安装,请在命令提示符下运行:Installutil.exe c:\myfolder\myservicefile.exe
而已。
Installutil.exe 位于框架文件夹中,位于 Windows 目录的某个位置。它不必包含在您的项目中。
如果您已经创建了安装程序,则无需为安装项目做太多额外的工作。它可以让你直接从 Visual Studio 中安装和卸载。网上有很好的教程。
您将遇到的 2 个与服务相关的问题,以及如何解决这些问题:
您卸载了一项服务,但无法重新安装它,因为您收到错误消息表明该服务正在等待删除并且需要重新启动。=> 关闭 Windows 服务管理器。它将释放所有引用,您可以重新安装您的服务。
您在卸载之前删除了服务可执行文件,现在您无法“卸载”它来清理注册表。=> 除了完全避免这种情况外,我对此没有解决方案。