用于更改服务路径的托管API
本文关键字:API 路径 服务 用于 | 更新日期: 2023-09-27 18:06:02
我的机器上安装了Windows Service。
在新版本中,我重命名了服务的。exe名称(例如,MyService.exe
-> Foo.Server.exe
)。
我知道可以通过修改注册表来更改服务可执行路径,但是是否存在托管API,以便我可以更确信它不会在未来的版本中中断?
您可以PInvoke SCM API, ChangeServiceConfig,并提供lpBinaryPathName参数。
下面是来自:http://pinvoke.net/default.aspx/advapi32/ChangeServiceConfig.html
的PInvoke原型[DllImport("Advapi32.dll", EntryPoint="ChangeServiceConfigW", CharSet=CharSet.Unicode, ExactSpelling=true, SetLastError=true)]
internal static extern bool ChangeServiceConfig(
SafeHandle hService,
int dwServiceType,
int dwStartType,
int dwErrorControl,
[In] string lpBinaryPathName,
[In] string lpLoadOrderGroup,
IntPtr lpdwTagId,
[In] string lpDependencies,
[In] string lpServiceStartName,
[In] string lpPassWord,
[In] string lpDisplayName
);
使用ServiceController类打开SCM和服务,您只需像这样调用它:
static void ChangeServicePath(string svcName, string exePath)
{
const int SERVICE_NO_CHANGE = -1;
using (ServiceController control = new ServiceController(svcName))
ChangeServiceConfig(control.ServiceHandle,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
SERVICE_NO_CHANGE,
exePath,
null,
IntPtr.Zero,
null,
null,
null,
null);
}