如何以編程方式確定終端服務服務是否正在運行並且運行狀況良好? 我正在創建一個.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