2016-07-26 10 views
0

Мой код 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, который требует повышения без запуска подсказки?

+0

это может помочь: _UAC самовозвышение (CSUACSelfElevation) _ https://code.msdn.microsoft.com/windowsdesktop/csuacselfelevation-644673d3 –

+0

@JeroenvanLangen Там в 'catch' заявление с комментарием' Пользователь отказался от высоты ., что, скорее всего, означает, что приглашение все еще существует. – sharptooth

+0

Вы работаете как служба? – lokusking

ответ

0

Оказывается, это был не запрос высоты. Это диалоговое окно «здесь мое лицензионное соглашение, пожалуйста, прочтите и примите его», показанное Process Monitor, несмотря на тихий режим. После принятия лицензионного соглашения Process Monitor может работать отлично, без приглашений на повышение в этой среде.

0

Здесь приведено обсуждение List of UAC prompt triggers?, в котором указывается, что диалог UAC запускается рядом возможных решений, включая параметры реестра и исполняемое имя файла. Если приглашение UAC не отключено в целевой операционной системе, я думаю, что вы ничего не можете сделать - операционная система пытается защитить себя от программы, которая порождает системные утилиты уровня администратора без уведомления пользователя.

Тем не менее - информация о мониторе процесса, показанная в приложении Process Monitor, доступна в пространстве имен System.Diagnostics .net, поэтому нет необходимости на самом деле выгружать Process Monitor для получения необходимых данных.

+0

Можно ли отслеживать все вызовы API с помощью 'System.Diagnostics'? – sharptooth

+0

Какие данные вы собираетесь собирать из Procmon? Возможно, это вопрос другого запроса, потому что я не верю, что вы сможете предотвратить всплывающее окно UAC, если пользователь явно не отключил его. – PhillipH