我刚刚创建了一个简单的.NET Windows服务。我的用户应该从我的网站下载并安装在他们的计算机上。所以,从各种论坛帖子(包括这个网站)我知道为了做到这一点,我需要一个安装程序。或者我可以给他们服务文件并指导如何安装它。我开始创建一个安装项目,并能够编译我自己的.msi安装程序。但有一位用户抱怨他现在无法卸载它。我对它进行了研究,发现.msi格式存在一些问题,主要与它在GAC中计算引用的方式有关。不过,很容易帮他修理电脑。从我与用户的对话中我知道,训练他们使用sc.exe或installutil.exe几乎是不可能的。我还在http://installer.codeeffects.com找到了一个服务,它可以为我的服务构建一个安装程序而不需要任何代码,但我不确定我的安装程序是msi还是exe。所以,显然我在这里完全混乱:)请帮助大家,任何一般或详细的建议将受到高度赞赏。
答案 0 :(得分:6)
让您的服务接受将自己注册为服务的参数:
MyService.exe /i
在您的服务中,您检查此参数,如果存在,则获取服务以进行注册:
ManagedInstallerClass.InstallHelper(args);
有关详细信息,请参阅my answer至this question。这样,您就可以通过命令行以简单的方式让用户自己注册服务。
如果这对您的用户来说仍然过于复杂,您可以使用Environment.UserInteractive
检查用户是否双击了该服务。如果是这样,请安装/卸载该服务。如果没有,启动服务(这将是服务通过服务小程序和机器启动时启动的路径)。
答案 1 :(得分:2)
为什么不使用VS内置安装程序?我多年来一直在使用它。
问题(以及您可能认为它不起作用的原因)是,对于Windows服务,您必须添加一些自定义操作才能使服务注册。
看看这个,以及将自定义操作添加到安装项目部分:
http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
答案 2 :(得分:0)
我的建议是MSI在所需位置安装文件,包括执行installutil.exe的批处理文件。然后执行批处理文件的后安装步骤。
对于卸载,同样的方法 - 批处理文件作为预卸载步骤执行,然后卸载。我之前不得不做类似的事情。我知道这很痛苦。
答案 3 :(得分:0)
下面是如何使用Visual Studio 2005创建服务安装程序的非常酷的分步指南。(在Visual Studio 2008中几乎完全相同)。
http://aspalliance.com/1316_Working_with_Windows_Service_Using_Visual_Studio_2005.all
它给了我很多帮助:D
答案 4 :(得分:-1)
我想你可能想要将服务与你的应用程序分离。让服务使用实际应用程序逻辑调用可执行文件,并且您可以维护可执行文件多次重新安装它,而无需卸载/重新安装应用程序的服务部分。
这来自一个厌倦了处理微软安装程序的人。你可以从经验丰富的安装大师那里得到更好的答案。我不确定我是否在等它。我遇到了类似的问题,这可能是我的方法related question。