リモート コンピュータ上のプログラム ファイルへのパス

StackOverflow https://stackoverflow.com/questions/40769

  •  09-06-2019
  •  | 
  •  

質問

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

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

役に立ちましたか?

解決

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

他のヒント

これが私が最終的にやったことです:(pszComputer は「\ ame」という形式でなければなりません。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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top