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