2017-09-01 15 views
3

私は、ウィンドウの位置などを記憶するためにレジストリファイルを読み書きするプログラムを持っています。これは非常に単純です。システム。個々のユーザーのレジストリ値

私は先進的なインストーラを使用しています。

  1. 各ユーザーが独自のレジストリ値を使用してアプリケーションを使用するために、パラメータを配置する必要がありますか。
  2. このパスは一般的なので、プログラムは問題を起こさずにそのフォルダを見つけることができますか?

編集/更新:

質問1:あなたはHKEY_CURRENT_USERではないに物事を入れていますか?

回答:ファイルをHKEY_CURRENT_USERに置くと、そのファイルはそのユーザーの下に置かれます。だから私が管理者としてプログラムをインストールする場合、それはそのファイルを持っているそのユーザーだけです。私は高度なインストーラを使用しているので、私はそれがいくつかの設定値に該当するかどうか不安です。

ステートメント1 from Bogdan Mitrache: また、Windowsインストーラの自己修復サポート(高度なインストーラでもサポートされています)を利用して、アプリケーションを起動するユーザーごとにHKCUでデフォルト設定を書き込むこともできます。管理者がインストールした場合でも同様です。以下はファイルの例ですが、レジストリにも適用されます:advancedinstaller.com/user-guide/qa-self-healing.html

レスポンス:これは条件付きインストールの問題を除いて良い解決策です。ユーザーは、両方ともこれらのレジストリ値を使用するいずれかの機能をインストールすることを選択できます。これはおそらく私のために働いていない理由です。私は、AIの論理的な意味でファイルを複製することを検討します。

+1

「HKEY_CURRENT_USER」にないものはどこに置いていますか? – molbdnilo

+0

多分あなたはHKLMの代わりにHKCUを使うべきです – Federico

+0

私はファイルをHKEY_CURRENT_USERの下に置くと、それはそのユーザの下に置くだけです。だから私が管理者としてプログラムをインストールする場合、それはそのファイルを持っているそのユーザーだけです。私は高度なインストーラを使用しているので、私はそれがいくつかの設定値に該当するかどうか不安です。 – 413X

答えて

1

これを処理するための正しい方法は、(すべてであれば)HKEY_LOCAL_MACHINEに(例えば、インストール時など)デフォルト値を格納することであり、その後HKEY_CURRENT_USERユーザ固有値を格納します。

アプリが値を読み取る必要がある場合は、まずHKEY_CURRENT_USERをチェックし、見つからない場合はHKEY_LOCAL_MACHINEをチェックインします(またはハードコードされたデフォルトを使用します)。

アプリに値を保存する必要がある場合は、HKEY_CURRENT_USERにのみ保存してください。

あなたのアプリが管理者によって実行されている場合、デフォルトでは管理者のキーから値を読み込み、その値を管理者のキーに保存することになります。そして、それは完全にOKです。なぜなら、管理者はその時のアプリのユーザーだからです。アプリが非管理者によって実行されている場合、値は代わりにそのユーザーとの相対的な値になります。アプリはadminユーザーとして実行されているが、/ストア非管理者ユーザーがWindowsにログインして、アプリがUACで実行されているインスタンスの別のユーザーのHKEY_CURRENT_USERキー(、の値を読み取るために必要がある状況では

他のユーザーのログインを使用して標高)は、その後、アプリがいずれかの方法で、他のユーザのHKEY_CURRENT_USERキーを開くことができます。

  • は、他のユーザーを偽装して、RegOpenCurrentUser()を使用します。

  • LoadUserProfile()を使用して他のユーザーのプロファイルを読み込みます。これにより、ロードされたユーザーのHKEY_CURRENT_KEYキーのハンドルが返されます(とりわけ)。あなたの代わりにHKEY_CURRENT_USERの別のユーザーのHKEY_CLASSES_ROOTキーにアクセスしたい場合は

、あなたはRegOpenUserClassesRoot()を使用することができます。

関連する問題