我正在尝试编写控制台应用程序以更改Windows服务可执行文件的路径。更确切地说,它应该将服务名称作为参数,然后将服务路径更改为可执行文件。 不幸的是,我找不到任何有关如何实现这一目标的信息,也许有经验的人可以给出任何建议吗?
我在https://msdn.microsoft.com/en-us/en-en/library/system.diagnostics.process(v=vs.110).aspx找到了一些有趣的信息,但它也没有帮助我。
答案 0 :(得分:0)
如果您无法致电sc.exe
来执行此操作,则可以使用this answer中的互操作代码并添加如下内容:
public static void SetWindowsServicePath(string serviceName, string binPath)
{
IntPtr hManager = IntPtr.Zero;
IntPtr hService = IntPtr.Zero;
try
{
hManager = OpenSCManager(null, null, SC_MANAGER_ALL_ACCESS);
if (hManager == IntPtr.Zero)
{
ThrowWin32Exception();
}
hService = OpenService(hManager, serviceName, SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG);
if (hService == IntPtr.Zero)
{
ThrowWin32Exception();
}
if (!ChangeServiceConfig(hService, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, binPath, null, IntPtr.Zero, null, null, null, null))
{
ThrowWin32Exception();
}
}
finally
{
if (hService != IntPtr.Zero) CloseServiceHandle(hService);
if (hManager != IntPtr.Zero) CloseServiceHandle(hManager);
}
}
根据sc.exe
,此代码需要管理员权限才能打开SCM。