7


2

レジストリに書き込む必要があるアプリケーションを開発しています。 XPでは問題なく動作しますが、Visual StudioからVistaで実行すると、セキュリティの例外が発生します。

Registry.LocalMachine.OpenSubKey( "ソフトウェア"、true);

レジストリのそのブランチに新しいキーを書き込もうとしています。

これを行うための正しい方法は、まずVista上でVSからアプリケーションを実行できるようにし、次にVista上で実行中の問題にユーザーが遭遇しないようにすることです。

ありがとう…

5 Answer


10


XPとVistaの両方でLocalMachineの下に新しいキーを書くために管理者権限が必要です。

あなたは、これがXP上で動作し、異なるアカウントのデフォルトのためにVista上で失敗することに気付くでしょう。

どちらの場合も、すばやく手間のかかる解決策は、アプリケーションが管理者権限で実行されるようにすることです。ただし、Vistaでは、これは厄介なことです。

より良い解決策は物事をわずかに再設計することでしょう - あなたのインストーラによって新しいサブキーを書くことができますか(管理者権限で動作します)それともあなたはどこかにあなたの情報を保存できますか?


7


標準ユーザー、およびVista上でUACを使用して実行している管理者には、ローカルマシンのレジストリキーを書き込む権限がありません。 標準ユーザーとして実行した場合、これはXPでも失敗します。

あなたのオプションは:

  • 設定がユーザーごとの場合は、代わりにRegistry.CurrentUserを使用してください。

  • アプリを管理者として実行します

  • だれでも書くことができるようにキーのACLを緩めなさい - 箱のどんなマルウェアもキーを乾杯することができるので、これは絶対に推奨されない。


2


管理者として実行している場合にのみ、そのキーに書き込むことができます。 そのため、VSを管理者として実行し、ユーザーはアプリケーションを管理者として実行する必要があります。

私の提案は、あなたが本当にLocalMachineに書く必要があるかどうか見ることでしょう。 あなたは管理者権限なしでCurrentUserに書き込むことができます。


1


誰もがXPの下で管理者としてそれを実行するので、私はそれが "XPの下で動作する"と思いますか?

  • 回避することができます(セットアップ中にキーを作成するかCurrrentUserか何かの下でキーを使用します)。

  • セットアップ中にアプリケーションに特権を付与できます。 やり方の詳細が少し足りないのですが。


-1


Registry.CurrentUserを使用する