Путь к Program-Files на удаленном компьютере
-
09-06-2019 - |
Вопрос
Как определить (локальный) путь для " Программных файлов " каталог на удаленном компьютере? Ни одна из версий SHGetFolderPath (или связанной функции) не содержит имя удаленного компьютера в качестве параметра.
Полагаю, я мог бы попытаться запросить HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ ProgramFilesDir с помощью удаленного реестра, но я надеялся, что это будет "задокументировано". способ сделать это.
Решение
Многие стандартные пути требуют, чтобы пользователь вошел в систему, особенно функции SH *, поскольку они предоставляются «оболочкой», то есть проводником. Я подозреваю, что единственный способ получить правильный путь - через реестр, как вы уже упоминали.
Другие советы
Это то, что я в итоге сделал: (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;
}