Перечислить сеансы служб терминалов в Delphi 2007 в Windows 7

Я использую QWINSTA.EXE для получения списка сеансов / пользователей с терминального сервера в нашей сети (мой компьютер - Windows 7 Pro, TS - Windows Server 2003). Я передаю вывод этой функции в текстовый файл, а затем обрабатываю текстовый файл, чтобы получить нужную мне информацию. Если есть лучший способ, пожалуйста, простите меня, пропустите мой длинный пост и укажите мне правильное направление.

Моя проблема в том, что ни ShellExecute(), ни ShellExecuteEx() не позволяют мне даже выполнять программу, не получив предварительно повышенных привилегий. Если вы перейдете в командную строку без повышенных прав, вы даже не увидите EXE в списке каталогов (без скрытого атрибута). Используйте командную строку «Запуск от имени администратора», и вы можете легко увидеть / использовать ее. В любом случае вы можете увидеть это из проводника Windows.

Я немного покопался и нашел эту жемчужину: _ 3_, который не работает, если я пытаюсь вызвать QWINSTA.EXE напрямую (не получается с сообщением об ошибке: System Error. Code: 2. The system cannot find the file specified.). Если я заверну все в пакетный файл и использую RunFileAsAdminWait() в пакетном файле, то, похоже, все будет работать нормально.

Я знаю, но не использовал WTSEnumerateSessions(). Мне не удалось найти много информации об этом, кроме ссылки MSDN, на которую я только что ссылался. Кто-нибудь знает приличный кусок справочного кода для использования этого API из Delphi? Он недоступен в модуле Windows Delphi 2007.

Вопросы:

  1. Есть ли другой / лучший способ запустить EXE, для которого требуются права администратора даже для доступа? Или это вообще то, что здесь происходит?

  2. Есть ли лучший способ получить список активных сеансов на сервере терминалов, особенно тот, который не требует повышенных привилегий?

  3. Если я застрял в использовании этого метода, я делаю это «правильно»?

Спасибо за любую помощь, которую вы можете предложить!


person Jerry Gagnon    schedule 17.11.2011    source источник
comment
Дай мне посмотреть, правильно ли я понял. Вы хотите запустить процесс, требующий повышения прав, не вызывая диалога UAC. Единственный способ сделать это - запустить ваш процесс с повышенными правами, чтобы процессы, которые он запускает, унаследовали этот токен с повышенными правами.   -  person David Heffernan    schedule 18.11.2011
comment
@David - мне, наверное, следовало исключить # 1 из этого, но это был первый раз, когда я столкнулся с ситуацией, когда файл можно было увидеть из проводника, но не найти при использовании ShellExecute () или даже просмотреть из не- повышенная командная строка. Я не был уверен, что делал что-то не так с самого начала, что вызвало необходимость в UAC.   -  person Jerry Gagnon    schedule 18.11.2011


Ответы (1)