Вопрос:
Я вызываю командный файл для запуска указанной DLL в MSTest.exe с помощью объекта Process.
Код:
Я хочу, чтобы во все времена этот процесс запускался с повышенными правами администратора.
Я делаю это в настоящее время, устанавливая свойство verb
процесса для runas
, как показано:
try
{
_process.StartInfo.Verb = "runas";
_process.StartInfo.CreateNoWindow = true;
_process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
_process.StartInfo.Arguments = testLocation + " " + testDll;
_process.StartInfo.FileName = batchFileLocation;
_process.Start();
_process.WaitForExit();
}
catch (Exception ex)
{
throw ex;
}
Проблема:
Это выполняется так, как ожидалось, но приглашение контроля учетных записей (UAC) просит подтвердить, что я хочу, чтобы процесс запускал.exe.
Поскольку этот код является частью автоматизированного процесса, у меня не может быть никакого человеческого ввода, чтобы нажать кнопку "Да" в подсказке, как я могу отключить приглашение UAC?
Вы не можете обойти приглашение UAC.
Спросите себя: что бы вы сделали, если бы вы делали это в Windows XP?
Представьте, что вы работали в операционной системе, у которой не было UAC. Что бы вы сделали dll? У вас больше нет удобства UAC, и вместо этого вы всегда работаете как обычный пользователь. Что бы сделал ваш тестовый режим?
Если вам не нравится диалог UAC, вы можете отключить его. Но вы не будете в лучшей ситуации, потому что теперь вы похожи на то, что вы были в Windows XP: стандартный пользователь и нет простого способа выйти из него.
Реальное решение заключается в том, чтобы исправить то, что делает ваша dll, которая защищена. Например, если это DLL COM, и саморегистрация не работает, потому что вы пытаетесь написать HKLM, тогда вам нужно
Если ваша dll сбой, потому что вы пытаетесь записать в C:\Program Files, вам необходимо изменить параметры безопасности в C:\Program Files
чтобы получить доступ.
Решение заключается в том, чтобы исправить то, что терпит неудачу.