创建.NET Windows服务安装程序的最佳方法是什么?

时间:2010-02-11 00:14:10

标签: .net windows-services installer windows-installer

我刚刚创建了一个简单的.NET Windows服务。我的用户应该从我的网站下载并安装在他们的计算机上。所以,从各种论坛帖子(包括这个网站)我知道为了做到这一点,我需要一个安装程序。或者我可以给他们服务文件并指导如何安装它。我开始创建一个安装项目,并能够编译我自己的.msi安装程序。但有一位用户抱怨他现在无法卸载它。我对它进行了研究,发现.msi格式存在一些问题,主要与它在GAC中计算引用的方式有关。不过,很容易帮他修理电脑。从我与用户的对话中我知道,训练他们使用sc.exe或installutil.exe几乎是不可能的。我还在http://installer.codeeffects.com找到了一个服务,它可以为我的服务构建一个安装程序而不需要任何代码,但我不确定我的安装程序是msi还是exe。所以,显然我在这里完全混乱:)请帮助大家,任何一般或详细的建议将受到高度赞赏。

5 个答案:

答案 0 :(得分:6)

让您的服务接受将自己注册为服务的参数:

MyService.exe /i

在您的服务中,您检查此参数,如果存在,则获取服务以进行注册:

ManagedInstallerClass.InstallHelper(args);

有关详细信息,请参阅my answerthis 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