Как автоматически разрешить моему сервису взаимодействовать с рабочим столом во время установки? - PullRequest
1 голос
/ 12 февраля 2009

У меня есть встроенная служба Windows, которая устанавливается командой installutil /i .NET 2.0. Служба устанавливается как со следующей учетной записью, с паролем:

NT AUTHORITY\LocalService

Когда я запускаю свой сервис с net start <serviceName>, я получаю

Error 5: Access Denied

Чтобы удалить его, мне пришлось открыть services.msc и в Свойствах дать сервис

Logon As -> Local System Account
         -> Allow Service to interact with desktop.

Могу ли я поместить весь этот «кликающий» бизнес в код, который является либо собственным .NET C # кодом, либо WMI, либо каким-либо другим пакетным скриптом? В любом случае, я буду использовать пакетный скрипт, так что все в порядке.

1 Ответ

4 голосов
/ 12 февраля 2009

Понял ответ, большое спасибо следующей веб-странице, которой я полностью доверяю.

текст ссылки

Вот решение, которое у меня есть, просто измените название своей службы по мере необходимости. Добавьте его в консольное приложение C # и запустите:)

static void Main(string[] args)
{
    string serviceName = "SERVICE_NAME_HERE"; 
    string objPath = string.Format("Win32_Service.Name='{0}'", serviceName);
    using (ManagementObject service = new ManagementObject(new ManagementPath(objPath)))
    {
        object[] wmiParams = new object[11];
        wmiParams[6] = "LocalSystem";
        wmiParams[7] = "";
        service.InvokeMethod("Change", wmiParams);
    }
}

}

...