Управляемый API для изменения путей обслуживания - PullRequest
1 голос
/ 17 августа 2011

У меня на компьютере установлена ​​служба Windows.

В новом выпуске я переименовал имя службы .exe (например, MyService.exe -> Foo.Server.exe).

Я понимаю, что пути к исполняемым файлам службы можно изменить с помощью , изменив реестр , но существует ли управляемый API, так что я могу быть более уверенным, что он не сломается в будущих выпусках?

1 Ответ

1 голос
/ 17 августа 2011

Вы можете вызвать API SCM, ChangeServiceConfig и предоставить параметр lpBinaryPathName.

Вот прототип PInvoke из: http://pinvoke.net/default.aspx/advapi32/ChangeServiceConfig.html

[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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...