Мой код C# работает на далеком Windows Server, где я не могу войти, а только развернуть код. Я хочу запустить Process Monitor из этого кода - запустить его в «тихом» режиме, а затем остановить его через некоторое время. Код, который будет запускать Process Monitor, запускается в локальной учетной записи NT AUTHORITY \ SYSTEM, поэтому я предполагаю, что он имеет все необходимые права.Как мой код C#, запущенный под учетной записью «SYSTEM», запускает программу, требующую повышения без запуска подсказки?
Однако, если я запустил Process Monitor в своем окне разработчика, он вызывает приглашение на повышение прав. Если я запустить его из командной строки локально:
procmon /Terminate
тогда я вижу запрос на повышение прав, подтвердить высоту и процесс выхода (как и ожидалось).
Если я запускаю его внутри C# код на далеком сервере:
using (var process = new System.Diagnostics.Process())
{
process.StartInfo.FileName = pathToProcMonExe;
process.StartInfo.Arguments = "/Terminate";
process.Start();
process.WaitForExit();
WriteToLog("Exited");
}
, то похоже, что он просто висит на высоту строке и процесс никогда не выходит.
Снова я не могу войти в систему и подтвердить высоту. Мне нужно делать все программно.
Мой процесс выполняется под «NT AUTHORITY \ SYSTEM». Как он запускает Process Monitor, который требует повышения без запуска подсказки?
это может помочь: _UAC самовозвышение (CSUACSelfElevation) _ https://code.msdn.microsoft.com/windowsdesktop/csuacselfelevation-644673d3 –
@JeroenvanLangen Там в 'catch' заявление с комментарием' Пользователь отказался от высоты ., что, скорее всего, означает, что приглашение все еще существует. – sharptooth
Вы работаете как служба? – lokusking