Путь к Program-файлам на удаленном компьютере

Как определить (локальный) путь к каталогу «Program Files» на удаленном компьютере? Не появляется ни одна версия SHGetFolderPath (или связанная с ней функция), которая принимает имя удаленного компьютера в качестве параметра.

Я думаю, я мог бы попытаться запросить HKLM\Software\Microsoft\Windows\CurrentVersion\ProgramFilesDir с помощью удаленного реестра, но я надеялся, что будет «задокументированный» способ сделать это.


person MobyDX    schedule 02.09.2008    source источник


Ответы (2)


Многие из стандартных путей требуют, чтобы пользователь вошел в систему, особенно функции SH *, поскольку они предоставляются «оболочкой», то есть Explorer. Я подозреваю, что единственный способ получить правильный путь — через реестр, как вы уже упоминали.

person Joel Lucsy    schedule 02.09.2008

Вот что я в итоге сделал: (pszComputer должен быть в форме "\\name". nPath - это размер pszPath (в TCHAR))

DWORD GetProgramFilesDir(PCTSTR pszComputer, PTSTR pszPath, DWORD& nPath) 
{
    DWORD n;
    HKEY hHKLM;
    if ((n = RegConnectRegistry(pszComputer, HKEY_LOCAL_MACHINE, &hHKLM)) == ERROR_SUCCESS)
    {
        HKEY hWin;
        if ((n = RegOpenKeyEx(hHKLM, _T("Software\\Microsoft\\Windows\\CurrentVersion"), 0, KEY_READ, &hWin)) == ERROR_SUCCESS)
        {
            DWORD nType, cbPath = nPath * sizeof(TCHAR);
            n = RegQueryValueEx(hWin, _T("ProgramFilesDir"), NULL, &nType, reinterpret_cast<PBYTE>(pszPath), &cbPath);
            nPath = cbPath / sizeof(TCHAR);
            RegCloseKey(hWin);
        }
        RegCloseKey(hHKLM);
    }
    return n;
}
person MobyDX    schedule 05.09.2008