如何在没有InstallUtil.exe的情况下安装.NET windows服务vb.net

问题描述:

我在vb.net中创建了一个windows服务。无论如何,我可以为它创建一个不需要installutil的安装吗?如何在没有InstallUtil.exe的情况下安装.NET windows服务vb.net

Installutil是必要的,但为了使事情更容易,您可以创建一个安装项目,以便您只需运行一个.msi来安装该服务。 (这使用installutil引擎盖下,但它极大地简化了安装。)

一个初排是在这里:http://support.microsoft.com/kb/816169

而另一个是在这里:http://msdn.microsoft.com/en-us/library/zt39148a(VS.80).aspx

两者之间的主要区别在于代码量在样品中。他们都走过了同样的过程。

链接的文章很旧,但仍适用于VS2010。上周我用第二篇文章介绍了VS2010服务的流程。

+0

感谢您的演练。我还用第二篇文章取得了巨大成功。然而,在我的服务中,我有一个名为filepath的变量,它决定了我的服务创建的文件的输出位置。无论如何,我可以让用户能够输入他们想要的位置吗? – Simon 2012-01-31 21:10:17

+0

或者我应该通过.bat fle找sintall? – Simon 2012-01-31 21:11:50

+1

如果这些值位于.config文件中,您可以这样做。这里有一个教程,演示如何修改安装项目安装场景中的app.config值。我没有使用它,但它看起来很刺激。 http://raquila.com/software/configure-app-config-application-settings-during-msi-install/ – David 2012-01-31 21:24:15

为什么你想避免installutils?

你可以尝试使用sc命令,如sc create ...

编辑:下面是一个MSDN页面吧:http://support.microsoft.com/?kbid=251192

DESCRIPTION: 
     Creates a service entry in the registry and Service Database. 
USAGE: 
     sc <server> create [service name] [binPath= ] <option1> <option2>... 

OPTIONS: 
NOTE: The option name includes the equal sign. 
     A space is required between the equal sign and the value. 
type= <own|share|interact|kernel|filesys|rec> 
     (default = own) 
start= <boot|system|auto|demand|disabled|delayed-auto> 
     (default = demand) 
error= <normal|severe|critical|ignore> 
     (default = normal) 
binPath= <BinaryPathName> 
group= <LoadOrderGroup> 
tag= <yes|no> 
depend= <Dependencies(separated by/(forward slash))> 
obj= <AccountName|ObjectName> 
     (default = LocalSystem) 
DisplayName= <display name> 
password= <password> 
+0

这是一个很好的。我忘记了这一点。在我发现如何起诉MSI文件之前,我在第一次服务中使用了该服务。这使您可以执行InstallUtil无法执行的操作,如设置要在其下运行的服务的默认用户名和密码。 +1。 – David 2012-01-30 20:18:56

+0

要特别注意[binPath =]在=和路径起点之间必须有空格。这让我无数次。 – AndyM 2016-01-23 08:35:43

您可以随时与注册表项做到这一点。
钥匙位于HKLM\SYSTEM\CurrentControlSet\services

您创建的密钥名称是您的服务处理程序中服务的嵌入名称。下面的值是相关的:

DisplayName =这被显示在服务管理器

ImagePath =服务可执行

Start(DWORD)=启动类型(3 =自动启动)

的FQ名文本

DelayedAutoStart(DWORD)=(1 =延迟)

WOW64(DWORD)=(0 = 64位应用程序,1 = 32位应用程序)

ErrorControl(DWORD)= 0

ObjectName = {用户名}下(本地系统为系统帐户)

运行有很多其他的价值,但应该让你开始。