Изменение пути к исполняемому файлу службы Windows - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь написать консольное приложение, чтобы изменить путь к исполняемому файлу службы Windows. Точнее, он должен принимать имя службы в качестве аргумента, а затем изменять путь службы на исполняемый файл. К сожалению, я не могу найти какую-либо информацию, как этого добиться, может быть, кто-то с большим опытом мог бы дать какой-нибудь совет?

Я нашел здесь интересную информацию https://msdn.microsoft.com/en-us/en-en/library/system.diagnostics.process(v=vs.110).aspx, но это также не помогло мне.

1 Ответ

0 голосов
/ 15 мая 2018

Если вы не можете просто позвонить sc.exe, чтобы сделать это, вы можете использовать код взаимодействия из этого ответа и добавить следующее:

    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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...