如何以编程方式确定终端服务服务是否正在运行并且运行状况良好? 我正在创建一个.net控制台应用程序,用于检查终端服务是否在计算机列表上运行。如何以编程方式确定终端服务器服务是否正在运行
我可以检查远程注册表项以查看它是否启用,但这并不意味着它正在运行。 我正在考虑与端口3389建立套接字连接,但它不一定要在该端口上进行监听。
有没有一个优雅的方式来检查这个?
问候,
如何以编程方式确定终端服务服务是否正在运行并且运行状况良好? 我正在创建一个.net控制台应用程序,用于检查终端服务是否在计算机列表上运行。如何以编程方式确定终端服务器服务是否正在运行
我可以检查远程注册表项以查看它是否启用,但这并不意味着它正在运行。 我正在考虑与端口3389建立套接字连接,但它不一定要在该端口上进行监听。
有没有一个优雅的方式来检查这个?
问候,
如果你(或者,具体而言,用户的应用程序作为)有权这样做,您可以远程查询目标机器的SCM,以确定TS服务是否正在运行。
您应该可以使用System.ServiceProcess.ServiceController.GetServices(string machineName)获取计算机上所有服务的列表,迭代结果以查找终端服务服务并查询其状态。
像魅力一样工作,谢谢! – 2009-07-10 16:59:17
从来没有做过任何事的,但WMI可能是去检查远程计算机上的进程的方式,等等。
您可以使用WinStationServerPing(未记录)API,如Terminal Server Ping Tool。如果服务正在运行(德尔福非托管代码,但不应该是很难翻译)检查 2个例子:
// This is the way WTSApi32.dll checks if Terminal Service is running
function IsTerminalServiceRunning: boolean;
var hSCM: HANDLE;
hService: HANDLE;
ServiceStatus: SERVICE_STATUS;
begin
Result := False;
// Open handle to Service Control Manager
hSCM := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, GENERIC_READ);
if hSCM > 0 then
begin
// Open handle to Terminal Server Service
hService := OpenService(hSCM, 'TermService', GENERIC_READ);
if hService > 0 then
begin
// Check if the service is running
QueryServiceStatus(hService, ServiceStatus);
Result := ServiceStatus.dwCurrentState = SERVICE_RUNNING;
// Close the handle
CloseServiceHandle(hService);
end;
// Close the handle
CloseServiceHandle(hSCM);
end;
end;
// This the way QWinsta.exe checks if Terminal Services is active:
function AreWeRunningTerminalServices: Boolean;
var VersionInfo: TOSVersionInfoEx;
dwlConditionMask: Int64;
begin
// Zero Memory and set structure size
ZeroMemory(@VersionInfo, SizeOf(VersionInfo));
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
// We are either Terminal Server or Personal Terminal Server
VersionInfo.wSuiteMask := VER_SUITE_TERMINAL or VER_SUITE_SINGLEUSERTS;
dwlConditionMask := VerSetConditionMask(0, VER_SUITENAME, VER_OR);
// Test it
Result := VerifyVersionInfo(VersionInfo, VER_SUITENAME, dwlConditionMask);
end;
请注意,在Windows 7中的终端服务服务默认情况下不运行。
服务器是否都在域/ AD? – Kev 2009-07-10 15:25:39