Я пытался определить, запущены ли службы терминалов. Я пытался использовать MSDN Way :
OSVERSIONINFOEX osVersionInfo;
DWORDLONG dwlConditionMask = 0;
memset( &osVersionInfo, 0, sizeof( osVersionInfo ) );
osVersionInfo.dwOSVersionInfoSize = sizeof( osVersionInfo );
osVersionInfo.wSuiteMask = VER_SUITE_TERMINAL;
VER_SET_CONDITION( dwlConditionMask, VER_SUITENAME, VER_AND );
return VerifyVersionInfo( &osVersionInfo, VER_SUITENAME, dwlConditionMask );
Работает хорошо, но на:
OS Name: Microsoft(R) Windows(R) Server 2003, Enterprise Edition
OS Version: 5.2.3790 Service Pack 2 Build 3790
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Server
OS Build Type: Multiprocessor Free
без роли служб терминалов вызов VerifyVersionInfo
возвращает ненулевое значение, что означает, что «в настоящее время работающая операционная система удовлетворяет указанным требованиям» или функция не работает.
GetLastError
возвращает:
0x000000cb "The system could not find the environment option that was entered."
В Windows XP с пакетом обновления 3 (SP3) вызов VerifyVersionInfo
возвращает нулевое значение, поэтому, я полагаю, ошибок при печати нет.
Как мне справиться с этим поведением? Это хорошо, чтобы относиться к этому, как будто нет терминальных служб? Есть ли лучшие методы?
Это ошибка в ОС?
Обновление:
В Windows Server 2008 R1 поведение аналогичное (не удается). Может быть и во многих других системах.