Batch file sc安装后如何自动启动windows服务?

Batch file sc安装后如何自动启动windows服务?,batch-file,windows-services,autostart,Batch File,Windows Services,Autostart,我为安装服务创建了一个批处理文件,因为我需要在没有Visual Studio的PC上安装我的服务 批处理文件的内容: @echo OFF echo Installing service... sc create "MyService" binpath= %~dp0\MyService.exe start= auto echo Installing service complete pause 我需要在安装后自动启动MyService,因此我编写了以下代码: private void svIns

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

批处理文件的内容:

@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();
}
如果使用InstallUtil通过Visual Studio命令提示符安装服务,则不会出现任何问题。 当我通过批处理文件安装服务时,我的服务没有自动启动

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

更新:感谢Sam Denty的回答,问题已经解决。

但我还有另一个问题:当我通过sc安装服务时,我的后安装功能中的代码不起作用?

这可以通过使用
net start service
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
@echo OFF
echo Installing service...
sc create "MyService" binpath= %~dp0\MyService.exe start= auto
sc start MyService
echo Installing service complete
pause

更新脚本:

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
@echo OFF
echo Installing service...
sc create "MyService" binpath= %~dp0\MyService.exe start= auto
sc start MyService
echo Installing service complete
pause

您可以安装服务,使其在操作系统启动时自动启动

服务存在于
HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Services
键中

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

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

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

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

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

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

以下是打电话的选项

SC CREATE
因此,如果运行问题中的命令

sc create "MyService" binpath= %~dp0\MyService.exe start= auto
因为您指定了“start=auto”,所以不需要执行任何其他操作,因为服务将自动启动

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

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

这很容易。也许,我使用了错误的关键字搜索。但这意味着我的代码在安装sc时在afterInstall功能中不起作用?