1

まず、いくつかの背景:

この製品は、NOTES.INI ファイルに行を追加または更新して、Lotus Notes クライアントと統合する必要があります。

Notes の単一ユーザー インストールを扱っている場合は問題ありません (つまり、マシンに複数の Windows ユーザーがいる場合、それらはすべて同じ Notes 構成を使用します)。この場合、Notes のインストール ディレクトリに 1 つの NOTES.INI ファイルがあります。

ただし、Notes のマルチユーザー インストール (各 Windows ユーザーが独自の Notes 構成を持っている) では、各ユーザーが独自の NOTES.INI ファイルをユーザーの LocalAppData ディレクトリ (例: C:\Documents and Settings\Username\Local Settings) に保存します。 \Application Data\Lotus\Notes.

問題は次のとおりです。Notes クライアントがマルチユーザー インストールされているマシンに製品をインストールする場合、そのマシンの各ユーザーのプロファイルで NOTES.INI ファイルを更新できる必要があります。

これを行うには、ユーザーがログインしたときにプログラムを実行して、そのユーザーの NOTES.INI ファイルがまだ更新されているかどうかを確認し、更新されていない場合は更新します。ただし、アプリケーションのアンインストール プロセスでは、マシン上のすべてのユーザーに対してこれらの変更を元に戻すことができる必要があります。

したがって、質問: コードがローカル管理者権限で実行されていると仮定すると、必要な変更を加えることができるように、各ユーザーのプロファイルを反復処理して LocalAppData ディレクトリを見つける方法はありますか?

どんな提案でも大歓迎です:-)

EDIT 2009-03-25 16:52 GMT:
可能なアプローチがあるようです (Martin C に感謝):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList    の各サブキーについて:
      それが「実際の」ユーザーの場合 (何らかの方法で決定):
        サブキー名を覚えておいてください - それはユーザーのSIDです
        ProfileImagePath 値を読み取る
        ユーザーのレジストリ ハイブがまだ読み込まれていない場合 (つまり、適切な SID を持つHKEY_USERSのサブキーがない場合):SE_BACKUP_NAMEおよびSE_RESTORE_NAME権限を
          有効にするRegLoadKey を使用してProfileImagePath\NtUser.dat
          からハイブをロードします。
        次の各レジストリ キーを順番に使用して、ユーザーの LocalAppData フォルダーを検索してみてください。
          HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\User シェル フォルダー
          HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell フォルダー
          HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Userシェル フォルダー
          HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell フォルダー
        必要に応じて、結果のパスで環境変数を展開します (おそらく、以前に取得した ProfileImagePath に %USERPROFILE% を展開するだけです)
        パスを使用してユーザーの NOTES.INI ファイルを見つけ、適切な変更を加えます。
        ハイブをロードする必要がある場合:
          RegUnLoadKey を使用してハイブをアンロードします。

私はおそらくそれをコード化することができますが、それは少し壊れやすいようで、うまくいかない可能性のある方法がいくつかあります. もっと「公式」なアプローチを持っている人はいますか?

4

1 に答える 1

3

のサブキーを列挙できます

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

各サブキーには、プロファイルのベースパスを指す「ProfileImagePath」が含まれています。OS のバージョンと言語設定に応じて、LocalAppData の場所を特定できます (言語に依存することに注意してください!)。

編集:さらに進むための可能な出発点は

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

残念ながら、これはユーザーごとに異なる可能性があり、HKEY_USERS には、プロファイルを読み込んだユーザーのキーのみが含まれます。何らかの方法でプロファイルをロードできるかどうかを試すことができます (HKEY_USERS にまだロードされていない場合、ユーザーのレジストリを何らかの方法でアタッチできるでしょうか?)。

于 2009-03-25T13:44:27.707 に答える