Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何从服务器检查exe是否在终端会话上运行_Delphi_Service_Terminal - Fatal编程技术网

Delphi 如何从服务器检查exe是否在终端会话上运行

Delphi 如何从服务器检查exe是否在终端会话上运行,delphi,service,terminal,Delphi,Service,Terminal,我正在创建一个更新程序,它将复制更新的.exe文件。它需要检查是否有任何.exe正在终端会话中运行。如果.exes正在运行,它将杀死他们。这将是在具有管理员权限的服务器上运行的服务。代码需要在Delphi中,有人对此有什么想法吗?如果您检查了这些问题,我相信您的问题会得到回答。 它们可能不是专门针对德尔福的,但第二个问题的批准答案提供了指向MSDN网站的链接 或者在网络上的另一次快速搜索中发现了这个代码片段。(这不是我的代码) 似乎GetCurrentSessionid的结果为0,然后您将在

我正在创建一个更新程序,它将复制更新的.exe文件。它需要检查是否有任何.exe正在终端会话中运行。如果.exes正在运行,它将杀死他们。这将是在具有管理员权限的服务器上运行的服务。代码需要在Delphi中,有人对此有什么想法吗?

如果您检查了这些问题,我相信您的问题会得到回答。 它们可能不是专门针对德尔福的,但第二个问题的批准答案提供了指向MSDN网站的链接

或者在网络上的另一次快速搜索中发现了这个代码片段。(这不是我的代码)

似乎GetCurrentSessionid的结果为0,然后您将在TS下运行


HTH.

有一组API可以枚举和检索会话中的会话和进程。您可能需要的两个是和。

无论如何都必须终止进程,不管它们是否在终端会话下运行。 你能澄清一下吗?你为什么需要这些信息

终止进程的最佳方法是使用“pskill”,直到从sysexternals开始。
只需使用Delphi代码中的exec即可。

我不确定Delphi的功能,但它应该很简单,只需抓取正在运行的进程列表,枚举它,并对进程名称进行文本检查。如果进程未运行,我不想调用pskill。pskill不会因此崩溃。在不存在的进程上调用它是没有问题的。
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;