Visual Studio セットアップ プロジェクト - ユーザーごとのレジストリ設定

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

質問

でセットアップ プロジェクトを保守しようとしています Visual Studio 2003 (はい、これはレガシー アプリケーションです)。現時点での問題は、レジストリ エントリを書き込む必要があることです。 HKCU コンピュータ上のすべてのユーザーに。彼らは、 HKCU それよりも HKLM これらはデフォルトのユーザー設定であり、ユーザーごとに変更されるためです。私の気持ちはそれです

  1. これは不可能です
  2. これはインストーラーが行うべきことではなく、アプリケーションが行うべきことです (結局のところ、インストール後にユーザー プロファイルが作成されるとどうなるでしょうか?)。

それを念頭に置いて、アプリケーションの変更はできるだけ少なくしたいので、私の質問は次のとおりです。 すべてのユーザーのレジストリ エントリを追加することは可能ですか? Visual Studio 2003 セットアッププロジェクト?

そして、現時点では、プロジェクトには 5 つのレジストリ ルート キーがリストされています (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, 、ユーザー/マシン ハイブ)。私は Users のルート キーについては何も知りませんし、User/Machine Hive も見たことがありません。誰かがそれらが何であるかについて私に教えてもらえますか?おそらく彼らは上記の問題を解決してくれるでしょう。

役に立ちましたか?

解決

初め:はい、これは、指定した正確な理由のアプリケーションに属するものです。新しいユーザー プロファイルが作成された後はどうなりますか?確かに、ドメインを使用している場合、作成時にレジストリに何らかの情報を入れることは可能ですが、これは実際の使用例ではありません。アプリケーションは設定があるかどうかを確認し、ない場合はデフォルト設定を使用する必要があります。

そうは言っても、HKEY_USERS ハイブを通じて他のユーザーのキーを変更することは可能です。

私には Visual Studio 2003 セットアップ プロジェクトの経験がありません。そのため、どこを見ればよいかわかるかもしれない (まったく関係のない) VBScript コードを次に示します。

const HKEY_USERS = &H80000003
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ""
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing"
For Each subkey In arrSubKeys
    objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944
Next

(コードの提供: ジェロン・リトマイヤー)

他のヒント

すべてのユーザーに設定したいので、おそらくドメインの下で実行されているある種の共有コンピューターを使用しているのではないかと思います。

ここにドラゴンがいる

ジョーとジェーンが定期的にコンピュータにログオンすると、それぞれが「レジストリ」を持つことになります。

次に、アプリをインストールすると、インストーラーは巨大なハッキングや不快なものを使用して、HKCU の下に項目を設定します。

次に、ボブがやって来てログオンします (彼と他の 500 人がドメインにアカウントを持っているため、これを行うことができます)。彼はこれまでこのコンピュータを使用したことがないため、レジストリがありません。初めてログインするとき、Windows はユーザーの設定を作成しますが、ユーザーの設定はありません。

その後、アプリが落ちたり、誤った動作をしたりすると、ボブは組み込まれているレイニクソン製のくだらない製品について大声で文句を言います。

正しい答えは、アプリにデフォルト設定をいくつか用意し、それが見つからない場合はレジストリに書き込むことです。いずれにせよ、アプリはレジストリに依存してはならず、HKCU に限らずあらゆるレジストリ エントリに対して必要に応じて何かを作成するのが一般的な推奨事項です。

たとえ何であっても、 MSDN の記事 MSDN 記事のアーカイブ User/Machine Hive については、HKEY_USERS には書き込まれません。むしろ、「Just Me」を選択した場合は HKCU に書き込み、「全員」を選択した場合は HKLM に書き込みます。

したがって、私の解決策は、ユーザー/マシン ハイブを使用し、アプリケーションでレジストリ エントリが HKCU にあるかどうかを確認し、ない場合は HKLM からコピーすることです。これがおそらく最も理想的な方法ではないことは承知していますが、変更は最小限で済みます。

MSDN のこのエントリで解決策の途中まで来ました (なぜ今まで見つけられなかったのかわかりません)。

ユーザー/マシン ハイブ
このハイブに入力されたサブキーと値は、ユーザーがインストール中に「Just Me」または HKEY_USERS ハイブを選択した場合、またはユーザーが「Everyone」を選択した場合に、HKEY_CURRENT_USER ハイブにインストールされます。

レジストリエディタ MSDN 記事のアーカイブ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top