2016-06-06 7 views
0

Я хочу p/вызвать функцию windows api ChangeServiceConfig2 для установки описания и/или «начала задержки» для службы (и, возможно, больше). Особая вещь в том, что он принимает указатель на разные структуры в зависимости от того, что вы хотите изменить.Как p/вызвать ChangeServiceConfig2 из C#?

Например, чтобы изменить текст описания службы, вам нужно указать ее в структуру SERVICE_DESCRIPTION и изменить флаг задержки, который вы укажете на структуру SERVICE_DELAYED_AUTO_START_INFO.

Я решил эту проблему, создав несколько перегруженные функции апи так:

private static extern bool ChangeServiceConfig2(IntPtr hService, int dwInfoLevel, [MarshalAs(UnmanagedType.Struct)] ref SERVICE_DESCRIPTION lpInfo); 
    private static extern bool ChangeServiceConfig2(IntPtr hService, int dwInfoLevel, [MarshalAs(UnmanagedType.Struct)] ref SERVICE_DELAYED_AUTO_START_INFO lpInfo); 

Я хочу спросить, если есть лучшее решение, которое не требует другого дюжину перегрузкам, если я хочу, чтобы полностью прототип это?

+0

Дубликат [этого] (http://stackoverflow.com/questions/23270920/set-existing-service-to-auto-delayed-start)? –

+0

Нет, не совсем ... Вопрос о прототипировании P/Invoke, а не о том, как настроить службу на отложенный старт ... – wexman

+0

Я понимаю. Я понял, что в этом Q & A проблема прототипирования была решена: вы проверили [pinvoke.net] (http://pinvoke.net/default.aspx/advapi32/ChangeServiceConfig2.html)? –

ответ

0

Просто посмотрел внутри кода класса ServiceInstaller и выяснили, что они делают это так же, так что не может быть все неправильно ...

Все еще открыты для предложений, хотя.