У меня есть системная служба 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