Pergunta

Como determino o caminho (local) para o diretório "Arquivos de Programas" em um computador remoto?Não aparece nenhuma versão de SHGetFolderPath (ou função relacionada) que use o nome de um computador remoto como parâmetro.

Acho que poderia tentar consultar HKLM\Software\Microsoft\Windows\CurrentVersion\ProgramFilesDir usando o registro remoto, mas esperava que houvesse uma maneira "documentada" de fazer isso.

Foi útil?

Solução

Muitos dos caminhos padrão exigem que um usuário esteja logado, especialmente as funções SH*, pois são fornecidas pelo "shell", ou seja, Explorer.Suspeito que a única maneira de obter o caminho certo é através do registro, como você já mencionou.

Outras dicas

Isto é o que acabei fazendo:(pszComputer deve estar no formato "\ ome".nPath é o tamanho de pszPath (em TCHARs))

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top