Domanda

Come posso determinare il percorso (locale) per la directory "Programmi" su un computer remoto?Non risulta alcuna versione di SHGetFolderPath (o funzione correlata) che prenda come parametro il nome di un computer remoto.

Immagino che potrei provare a eseguire una query su HKLM\Software\Microsoft\Windows\CurrentVersion\ProgramFilesDir utilizzando il registro remoto, ma speravo che ci fosse un modo "documentato" per farlo.

È stato utile?

Soluzione

Molti dei percorsi standard richiedono che l'utente sia loggato, soprattutto le funzioni SH* poiché quelle sono fornite dalla "shell", cioè Explorer.Sospetto che l'unico modo per ottenere la strada giusta sia attraverso il registro come hai già menzionato.

Altri suggerimenti

Questo è quello che ho finito per fare:(pszIl computer deve essere nel formato "\ ome".nPath è la dimensione di pszPath (in 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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top