0

我正在尝试将 exe 文件作为窗口服务运行。我之前通过这样做手动完成了它:

sc create TestService binPath= "C:\MyExePathWhichIsToBeRunAsWindowService" 

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

代码应该询问用户exe文件的路径,这个文件必须作为窗口服务运行,还有他必须提供给这个窗口服务的名称。所以这两个东西用户将在运行时输入,这很容易对我来说是任务,但是一旦我得到了那个,那么我将如何从 c# 代码运行下面的命令?

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

有人可以帮我吗?

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

4

2 回答 2

1

你应该调查一下Process.Start。您可能想尝试这样的事情:

Process.Start("sc", String.Format("create \"{0}\" binPath=\"{1}\"", serviceName, binPath));
于 2015-10-29T13:19:58.447 回答
1

你可以看看Topshelf

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

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);
}
于 2015-10-29T12:58:36.763 回答