Я пытаюсь проверить различные системные пути, которые должны быть возвращены GetWindowsDirectory а также GetSystemWindowsDirectory API на консоли и через удаленное соединение. Согласно документации:
В службах терминалов функция GetSystemWindowsDirectory извлекает путь к системному каталогу Windows, а функция GetWindowsDirectory извлекает путь к каталогу Windows, который является закрытым для каждого пользователя. В однопользовательской системе GetSystemWindowsDirectory совпадает с GetWindowsDirectory.
Кажется, я не вижу никакой разницы. Они оба возвращают «C: \ Windows» в любом.
Может кто-нибудь объяснить, почему я не вижу, что заявлено в документации для служб терминалов?
РЕДАКТИРОВАТЬ: Вот небольшой пример кода C ++, который я выполнял:
//Check if RDP session
BOOL bRDP = FALSE;
DWORD dwSessID = -1;
::ProcessIdToSessionId(::GetCurrentProcessId(), &dwSessID);
DWORD dwSz;
LPTSTR ppBuffer = NULL;
if(WTSQuerySessionInformation(NULL, dwSessID, WTSClientProtocolType, &ppBuffer, &dwSz))
{
bRDP = *(USHORT*)ppBuffer == 2;
WTSFreeMemory(ppBuffer);
}
_tprintf(_T("%s\n"), !bRDP ? _T("Console Session") : _T("RDP Session"));
//Get system folder
TCHAR buff[MAX_PATH * 2];
buff[0] = 0;
GetSystemWindowsDirectory(buff, SIZEOF(buff));
_tprintf(_T("Sysfolder1: %s\n"), buff);
buff[0] = 0;
GetWindowsDirectory(buff, SIZEOF(buff));
_tprintf(_T("Sysfolder2: %s\n"), buff);
И вот вывод, который я получаю от сеанса удаленного рабочего стола:
RDP Session
Sysfolder1: C:\WINDOWS
Sysfolder2: C:\WINDOWS
Благодаря @RaymondChen и @Stefan, только если указать / TSAWARE: НЕТ Опция линкер в настройках приложения, вы увидите разницу в выводе:
В этом случае я получил этот вывод:
RDP Session
Sysfolder1: C:\WINDOWS
Sysfolder2: C:\Documents and Settings\RemoteUserA\WINDOWS
Других решений пока нет …