1

リモートコンピュータの「ProgramFiles」ディレクトリの(ローカル)パスを確認するにはどうすればよいですか?リモートコンピューターの名前をパラメーターとして受け取るSHGetFolderPath(または関連する関数)のバージョンには表示されません。

リモートレジストリを使用してHKLM\Software \ Microsoft \ Windows \ CurrentVersion \ ProgramFilesDirにクエリを実行できると思いますが、「文書化された」方法があることを期待していました。

4

2 に答える 2

1

これが私がやったことです:(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;
}
于 2008-09-05T11:43:13.620 に答える
1

標準パスの多くでは、ユーザーがログインする必要があります。特に、SH* 関数は「シェル」、つまりエクスプローラーによって提供されるためです。正しいパスを取得する唯一の方法は、既に述べたようにレジストリを使用することだと思います。

于 2008-09-02T23:00:49.120 に答える