如何在sc安装后自动启动Windows服务?

时间:2017-04-01 19:56:26

标签: batch-file windows-services autostart

我创建了一个用于安装服务的批处理文件,因为我需要在PC上安装我的服务而没有Visual Studio。

批处理文件的内容:

@echo OFF
echo Installing service...
sc create "MyService" binpath= %~dp0\MyService.exe start= auto
echo Installing service complete
pause

我需要在安装后自动启动MyService,所以我创建了这段代码:

private void svInstaller_AfterInstall(object sender, InstallEventArgs e)
{
    ServiceController sc = new ServiceController(svInstaller.ServiceName);
    sc.Start();
}

如果我通过Visual Studio命令提示符使用InstallUtil安装我的服务,请不要有任何问题。 当我通过批处理文件安装服务时,我的服务没有自动启动。

如何在批处理文件安装后自动启动我的服务?

更新:谢谢Sam Denty的回答,问题解决了。
但我有另一个问题:当我通过sc安装我的服务时,我在AfterInstall函数中的代码不起作用?

2 个答案:

答案 0 :(得分:5)

使用API version 19net start service命令(see previous question on that)可以实现这一点。

要使用sc start启动服务,语法为:

sc start

示例:

sc [<ServerName>] start <ServiceName> [<ServiceArguments>]

<ServerName>
    Specifies the name of the remote server on which the service is located. The name must use the Universal Naming Convention (UNC) format (for example, \\myserver). To run SC.exe locally, omit this parameter.
<ServiceName>
    Specifies the service name returned by the getkeyname operation.
<ServiceArguments>
    Specifies the service arguments to pass to the service to be started.


更新了脚本:

sc start MyService

答案 1 :(得分:0)

您可以通过某种方式安装服务,使其在操作系统启动时自动启动。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services键中存在服务。

Start子项确定服务将如何运行以及何时运行。

最低值适用于内核驱动程序:

0 -引导:由内核加载程序加载。用于引导(启动)卷的驱动程序堆栈的组件必须由内核加载程序加载。

1 -系统:由I / O子系统加载。指定在内核初始化时加载驱动程序。

2 -自动:由服务控制管理器加载。指定自动加载或启动服务。

自动”选项(“ 2 ”值)似乎是您的最佳选择。

以下是拨打电话的选项

SC CREATE

enter image description here 因此,如果在您的问题中运行命令,

sc create "MyService" binpath= %~dp0\MyService.exe start= auto

由于您指定了“启动=自动”,因此您无需执行其他任何操作,因为该服务将自动启动。

关于空白问题,请尝试以下操作:

SET servicebin=several words.exe
sc create "MyService""%servicebin%" start = auto