Как проверить, работает ли exe в терминальной сессии с сервера - PullRequest
2 голосов
/ 14 января 2010

Я создаю программу обновления, которая будет копировать обновленные файлы .exe. Необходимо проверить, работает ли какой-либо из .exes в терминальной сессии. Если .exes запущен, он убьет их. Это будет служба, работающая на сервере с правами администратора. Код должен быть в Delphi, у кого-нибудь есть мысли по этому поводу?

Ответы [ 3 ]

7 голосов
/ 15 января 2010

Если вы проверите эти ТАК вопросы, я думаю, что на ваш вопрос ответят. Они могут не относиться конкретно к delphi, но утвержденный ответ для второго дает ссылку на веб-сайт MSDN.

как к программно-сказать-если-The-терминал-сервер-сервис является выполняющимся

как-ду-я-говорю-если-мое-приложение-это-обкатка-ан-Rdp-сессии

Или другой быстрый поиск в Интернете показал этот фрагмент кода. (Это не мой код)

function ProcessIdToSessionId(dwProcessId: DWORD; pSessionId: DWORD): BOOL; stdcall; external 'kernel32.dll';

function GetSessionIdfromProccessId(const processId: DWORD; var sessionId: DWORD): boolean;
begin
    result:=ProcessIdToSessionId(processId, DWORD(@sessionId));
end;

function GetCurrentSessionId: DWORD;
begin
    if not GetSessionIdfromProccessId(GetCurrentProcessId,result) then
        result:=0;
end;

Похоже, что результат GetCurrentSessionid <> 0 означает, что вы работаете под TS.

НТН.

3 голосов
/ 15 января 2010

Существует группа API, которые могут перечислять и извлекать сеансы и процессы в сеансах. Вам могут понадобиться два WTSEnumerateSessions и WTSEnumerateProcesses .

0 голосов
/ 15 января 2010

Процессы должны быть уничтожены в любом случае, независимо от того, запущены они в терминальной сессии или нет. Не могли бы вы уточнить - зачем вам эта информация?

Лучший способ убить процесс - это использовать "pskill" до sysexternals. Просто используйте exec из вашего кода Delphi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...