まず、いくつかの背景:
この製品は、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 を使用してハイブをアンロードします。
私はおそらくそれをコード化することができますが、それは少し壊れやすいようで、うまくいかない可能性のある方法がいくつかあります. もっと「公式」なアプローチを持っている人はいますか?