Запустите программу как администратор из службы Windows - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть системная служба Windows, работающая под учетной записью SYSTEM, которая должна запустить утилиту с правами администратора.Эта утилита не имеет окна и не взаимодействует с пользователем.На самом деле это приложение безопасности, которое использует низкоуровневые дыры для предприятий, чтобы отслеживать поведение пользователя.

Если я запускаю службу с правами администратора для учетной записи администратора, все в порядке.Он запускает утилиту, и регистрация ключей работает, как и ожидалось.

Когда служба работает по системному соединению, утилита запускается, но регистрация ключей не работает.Глядя на процесс, я вижу, что и сервис, и утилита находятся под учетной записью SYSTEM.

Я пробовал так много комбинаций

ProcessStartInfo myProcess = new ProcessStartInfo(fileName, parameters);
myProcess.UserName = "admin";
myProcess.Domain = "domain";
myProcess.Password = new NetworkCredential("", "password").SecurePassword;
myProcess.UseShellExecute = false;
myProcess.ErrorDialog = true;
myProcess.Verb = "runas";
myProcess.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(myProcess);

Я пробовал все вариантывыше без удачи.Процесс всегда запускается как СИСТЕМА.Я также попробовал все три

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />
<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

в app.manifest утилиты.

Я даже пробовал олицетворение с WindowsImpersonationContext, и это не в состоянии запустить процесс.

Возможно ли это?

Я полагаю, что вместо того, чтобы системная служба запускала процесс, мне лучше использовать TaskScheduler, чтобы запланировать запуск утилиты, а если она закрыта, иметьсервис перезапускает его через TaskScheduler

...