Я использую 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.
Вопросы:
Есть ли другой / лучший способ запустить EXE, для которого требуются права администратора даже для доступа? Или это вообще то, что здесь происходит?
Есть ли лучший способ получить список активных сеансов на сервере терминалов, особенно тот, который не требует повышенных привилегий?
Если я застрял в использовании этого метода, я делаю это «правильно»?
Спасибо за любую помощь, которую вы можете предложить!