关于.net:如何使用c#运行exe作为窗口服务

How to run exe as window service using c#

本问题已经有最佳答案,请猛点这里访问。

我正在尝试将一个exe文件作为窗口服务运行。我以前是这样手动操作的:

1
sc create TestService binPath="C:\MyExePathWhichIsToBeRunAsWindowService"

它可以正常工作,当我看到我能够找到的服务时,现在必须使用C代码来做同样的事情。

代码应该要求用户输入exe文件的路径,并且该文件必须作为窗口服务运行,并且必须提供给该窗口服务的名称。因此,这两件事用户将在运行时输入,这对我来说是一项简单的任务,但一旦我得到了,那么我将如何从C代码运行下面的命令?

1
sc create TestServiceNameUsrEntered binPath="path user entered for exe at run time"

有人能帮我吗?

编辑:请注意,用户将始终输入ServiceApplication exe文件,而不是任意文件


你应该看看Process.Start。您可能想尝试这样的方法:

1
Process.Start("sc", String.Format("create "{0}" binPath="{1}"", serviceName, binPath));

你可以看一下托普谢夫。

如果您想自己从头开始,可以查看hostInstaller.cs,它只需添加所需的注册表项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using (RegistryKey system = Registry.LocalMachine.OpenSubKey("System"))
using (RegistryKey currentControlSet = system.OpenSubKey("CurrentControlSet"))
using (RegistryKey services = currentControlSet.OpenSubKey("Services"))
using (RegistryKey service = services.OpenSubKey(_settings.ServiceName, true))
{
    service.SetValue("Description", _settings.Description);

    var imagePath = (string)service.GetValue("ImagePath");

    _log.DebugFormat("Service path: {0}", imagePath);

    imagePath += _arguments;

    _log.DebugFormat("Image path: {0}", imagePath);

    service.SetValue("ImagePath", imagePath);
}