21

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

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

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

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

4

4 に答える 4

6

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

そうは言っても、HKEY_USERSHiveを介して他のユーザーのキーを変更することは可能です。

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

(コード提供:Jeroen Ritmeijer

于 2008-08-03T20:48:47.263 に答える
6

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

ここにドラゴンがいます

ジョーとジェーンが定期的にコンピューターにログオンすると、それぞれに「レジストリ」が作成されるとします。

次に、アプリをインストールします。インストーラーは、巨大なハックと嫌なものを使用して、HKCUの下にアイテムを設定します。

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

その後、アプリが倒れたり、正しく動作しなかったりすると、bobはraynixonに組み込まれているこれらのくだらない製品について大声で不平を言います。

正解は、アプリにいくつかのデフォルト設定を設定することです。デフォルト設定が見つからない場合は、レジストリに書き込むことができます。アプリがレジストリに依存することはなく、HKCUだけでなく、レジストリエントリについても、必要に応じて作成することをお勧めします。

于 2008-08-03T21:17:33.557 に答える
3

私はMSDNのこのエントリで解決策の途中です(以前はどうやって見つけられなかったのかわかりません)。

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

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

于 2008-08-03T20:45:27.350 に答える
2

MSDNの記事 ArchiveofMSDNArticleがUser/Machine Hiveについて述べているにもかかわらず、 HKEY_USERSには書き込みません。むしろ、Just Meを選択した場合はHKCUに書き込み、全員を選択した場合はHKLMに書き込みます。

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

于 2008-08-03T22:34:06.380 に答える