Служба Windows, работающая как вошедший в систему пользователь, имеет проблемы с доступом из-за UAC - PullRequest
0 голосов
/ 31 января 2009

У меня есть служба Windows, которая работает как вошедший в систему пользователь (локальный администратор). Во время запуска я получаю сообщение: «Невозможно создать временный класс (результат = 1)». Итак, я пошел в папку windows / temp и UAC попросил меня повысить свои привилегии - после этого служба будет нормально запускаться. Итак, как мне справиться с этим запросом UAC с точки зрения службы Windows?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 30 августа 2009

Относительно исходного вопроса - помимо конкретной проблемы порядка событий, которая исправила ваши симптомы.

Когда пользователь, являющийся членом группы локальных администраторов, входит в систему на компьютере под управлением UAC, два токена безопасности предоставлено - один с ограниченными правами и один с более высоким набором разрешений. По умолчанию используются более низкие разрешения - если только не указано иное. Основное средство определения - через пользовательский интерфейс, как вы это сделали. Другой метод заключается в использовании манифеста приложения: файла XML, который определяет, как ОС должна обрабатывать это приложение. Файл манифеста должен быть помещен в ту же папку, что и исполняемый файл, и иметь имя в следующем формате: «my_application_name.exe.manifest»

XML в манифесте будет выглядеть примерно так:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" name="MY_APPLICATION_NAME" type="win32"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator"/> </requestedPrivileges> </security> </trustInfo> </assembly>
Я уверен, что вы можете найти более подробную информацию, прибегая к помощи "UAC Manifest" ...

Надеюсь, это полезно ...

0 голосов
/ 04 февраля 2009

Почему бы не запустить службу Windows как LocalSystem?

0 голосов
/ 31 января 2009

Я решил свою проблему, хотя до сих пор не знаю, как ответить на мой вопрос. По сути, мой сервис унаследовал временный каталог от процесса начальной загрузки, поэтому я изменил его, чтобы использовать временный каталог текущих пользователей. Вам нужно будет сделать что-то вроде этого:

myProcess.StartInfo.EnvironmentVariables.Add ("TempPath", "C: \ Temp")

...