2009-03-30 5 views
1

への書き込み中にアクセスが拒否されました、私は私のプログラムは、「HKEY_LOCAL_MACHINE」に常駐するレジストリキー内の値を編集できるようにしたいビスタ+ VB.NET - HKEY_LOCAL_MACHINE

My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\XYZ", "MyValue", "MyData") 

上記のWindows XPで正常に動作しますVistaではUnauthorizedAccessExceptionをスローします。

+0

下にファイルされます:起こるはずのもの。 – belgariontheking

答えて

8

あなたはVistaのUAC機能を実行しています。管理者権限で実行していないため、HKLMハイブの任意の場所に書き込むことはできません。

  1. は別の場所、おそらくHKCUを選択してください(管理者権限のないを持つアカウントとしてプログラムを実行しているとは異なる)管理者権限のないでプログラムを実行してこの問題を回避するには、2つの方法にはあります

    データを保存する

2つ目のオプションは、アプリケーションが常にユーザーとはみなせない管理者以外の権限で実行できるため、はるかに優れています。

ここにはUACに関するかなり詳細な記事があります。これは100%のプログラミング素材ではありませんが、それは正確なものであり、あなたの特定のプログラムにそれを関連付けることができます:http://technet.microsoft.com/en-us/library/cc709691.aspx

+0

XP上で正常に動作していたので、彼は管理者権限で実行していました。デフォルトでは、ユーザーはHKLMに書き込むことはできません。私はあなたが意味するかもしれないと思うのは、プロセスが管理トークンが取り除かれて実行されているということです。そのため、プロセスはユーザー権限で実行されています。 –

+0

@Rob、文章を少し鮮明にしようとしました – JaredPar

+0

この回答を完成させるには、「管理者としてプログラムを実行する」について、例えばhttp://www.sevenforums.com/tutorials/11841-run-administratorを参照してください。 .html –

-1

Vistaでは管理者アカウントに関する制限が厳しくなっています。管理者アカウントとしてログインしていない場合は、HKEY_LOCAL_MACHINEではなくHKEY_CURRENT_USERに書き込む必要があります。

IMO、これは意味があります。各ユーザは自分のプログラムのための独自の設定/ etcを持っています。 があり、プログラムのグローバル設定が必要な場合は、管理者アカウントで行う必要があります。

+0

Vistaには管理者アカウントの制限が厳しく、特に管理者権限を持つ管理者としてアプリを実行するようになっています。 – crashmstr

+0

@crashmstr:ええ。 – belgariontheking

2

ローカルマシンハイブを変更すると、システム全体に影響を与える可能性があるため、管理者以外のユーザーに限定されています。同じコードをXPマシンで管理者以外のアカウントで実行しようとすると、同じエラーが発生します。このプロセスはデフォルトで管理者ではないので、Vistaではこのエラーが発生しています。これに関する情報は、「Made for Windows 2000」、「Made for Windows XP」、「Made for Windows Vista」認定ガイドラインに記載されています。

あなたのプログラムが何をしているのかについての情報がほとんどないとすれば、具体的なガイダンスを得るためにさらに多くの情報が必要な場合があるため、一般的なケースで話します。あなたが必要としている場合を除いて、あなたのアプリケーションはローカルのマシンハイブを離れたままにしておきます。あなたのプログラムが非管理者モードで実行されている場合、これらの管理者キーへのアクセスを必要とする機能を無効にするか、管理者権限を要求することができます。