如何使用 C# 运行 exe 作为 window 服务
How to run exe as window service using c#
我正在尝试 运行 一个 exe 文件作为 window 服务。我以前通过这样做手动完成它:
sc create TestService binPath= "C:\MyExePathWhichIsToBeRunAsWindowService"
它可以正常工作,当我看到我能够找到它的服务时,现在必须使用 C# 代码做同样的事情。
该代码应询问用户 exe 文件的路径,并且此文件必须是 运行 作为 window 服务以及他必须提供给此文件的名称 window service.So 用户将在 运行 时输入这两件事,这对我来说是一项简单的任务,但是一旦我得到了,那么我将如何从 c# 代码 运行 下面的命令?
sc create TestServiceNameUsrEntered binPath= "path user entered for exe at run time"
有人能帮帮我吗?
编辑:请注意,用户将始终输入 serviceApplication exe 文件不是任意文件
你可以看看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);
}
你应该调查一下 Process.Start
。你可能想尝试这样的事情:
Process.Start("sc", String.Format("create \"{0}\" binPath=\"{1}\"", serviceName, binPath));
我正在尝试 运行 一个 exe 文件作为 window 服务。我以前通过这样做手动完成它:
sc create TestService binPath= "C:\MyExePathWhichIsToBeRunAsWindowService"
它可以正常工作,当我看到我能够找到它的服务时,现在必须使用 C# 代码做同样的事情。
该代码应询问用户 exe 文件的路径,并且此文件必须是 运行 作为 window 服务以及他必须提供给此文件的名称 window service.So 用户将在 运行 时输入这两件事,这对我来说是一项简单的任务,但是一旦我得到了,那么我将如何从 c# 代码 运行 下面的命令?
sc create TestServiceNameUsrEntered binPath= "path user entered for exe at run time"
有人能帮帮我吗?
编辑:请注意,用户将始终输入 serviceApplication exe 文件不是任意文件
你可以看看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);
}
你应该调查一下 Process.Start
。你可能想尝试这样的事情:
Process.Start("sc", String.Format("create \"{0}\" binPath=\"{1}\"", serviceName, binPath));