如何使用Visual Studio 2017 Community部署Windows服务

6
使用VS2017 Community,我编写了一个在本地计算机上运行的服务。我按照这里的说明:https://learn.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer进行操作,并且根据以上链接中的说明成功安装了它。一切正常。现在我想在我们组织的六台服务器上部署它。在Microsoft有关安装服务的文档(https://learn.microsoft.com/en-us/dotnet/framework/windows-services/how-to-install-and-uninstall-services)中提到:如果你是一个要发布用户可以安装和卸载的Windows服务的开发人员,应该使用InstallShield。并链接到一个适用于VS2012的页面(无法发布更多链接,因为我的声望<10)。我已经下载并安装了“Microsoft Visual Studio 2017 Installer Projects”包,它允许我创建一个设置项目。当我运行它时,它会正确地安装项目输出(即将exe和dll文件复制到Program Files中的正确文件夹),但不会创建服务。这个网站上有关于部署服务的详细帖子(问题9021075),但是当我按照这些说明操作时,在安装时出现1001错误。我能找到的所有文档都是针对早期版本的VS或以前的Installer包,所以我甚至不确定是否可以使用我正在使用的软件来完成部署。因此,使用Microsoft Visual Studio 2017 Installer Projects的VS2017 Community,我如何创建一个独立的安装程序来部署一个在本地使用InstallUtil正确安装的服务?或者我可以在目标机器上使用InstallUtil吗?我认为我需要在它们上安装Visual Studio,但我不想这样做。有更快的方法吗?我只需要在6台服务器上安装这个,所以即使一些手动的解决方法也可以。

InstallUtil.exe是.NET Framework的一部分,因此无需安装Visual Studio。 - Ɖiamond ǤeezeƦ
谢谢。帮助我找到了解决方案。 - Jon Roberts
2个回答

6
感谢您的回应。我现在有了一个解决方案。我在目标服务器上找到了InstallUtil(在我的情况下,它在C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319中,但是搜索会找到它)。我将其复制并添加到我的项目中作为内容,因此当我部署它时,我将InstallUtil放在与我的EXE相同的文件夹中。
要安装,我以管理员身份运行CMD,cd到项目文件夹并发出以下命令:
installutil.exe myService.exe 这是一项一次性任务。一旦服务正常工作,要更新它,我只需要停止它,上传新的myService.exe和任何DLL以覆盖旧文件,然后再重新启动它。

4
需要调试此问题,你需要提供关于serviceProcessInstaller1serviceInstaller1文件使用的设置的更多信息,因为安装程序引发的1001错误是一个通用错误。
另一种方法是使用Topshelf,这是一个用.NET框架编写服务的框架。它简化了服务的创建,允许开发人员创建一个简单的控制台应用程序,该应用程序可以使用Topshelf安装为服务。原因很简单:调试控制台应用程序比服务容易得多。而一旦应用程序经过测试并准备好投入生产,Topshelf使得将应用程序安装为服务变得非常容易。
或者,你可以使用InstallUtil.exe。它是.NET Framework的一部分,所以不需要安装Visual Studio。

谢谢。我现在使用InstallUtil进行了排序,但我会尝试Topshelf作为更长久的解决方案。 - Jon Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接