Перечислите сеансы терминальных служб в Delphi 2007 на Windows 7 - PullRequest
1 голос
/ 18 ноября 2011

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

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

Я немного осмотрелся и нашел этот драгоценный камень: RunFileAsAdminWait(), который не работает, если я пытаюсь вызвать 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. Если я застрял, используя этот метод, я делаю это "правильным образом"?

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

1 Ответ

6 голосов
/ 18 ноября 2011

Вместо конвейерного результата QWINSTA.EXE вы должны использовать Remote Desktop Services API Functions, чтобы Delphi-перевод этого API проверял JwsclTerminalServer единицу, которая является частьюJEDI Библиотека кодов безопасности Windows (JWSCL).в вашем случае для перечисления ресурсов сервера терминалов вы можете использовать метод TJwTerminalServer.EnumerateSessions .

...