2009-05-01 21 views
0
try 
{ 
    RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(
     "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

    if (rkApp.GetValue("AdobeBitmapViewer") == null) 
    { 
     rkApp.SetValue("AdobeBitmapViewer", Application.ExecutablePath.ToString()); 
    } 
    rkApp.Close(); 
} 
catch (Exception) { } 

このコードはWindows XPで動作しますが、Windows VistaではUnauthorizedExceptionが発生します。 VistaのUACをバイパスしてレジストリキーを設定する方法はありますか?Windows VistaでC#を使用してレジストリ値を設定するにはどうすればよいですか?

答えて

1

私はpagesが、OpenKeyとは対照的にCreateKeyを使用しているのを見たことがあります。違いがありますか?

権限の昇格が必要な場合があります。これはexample助けかもしれません。

ここをクリックしてanother seeting rightsの例をご覧ください。

+0

Registry.CurrentUserに高度が必要です。 – Michael

+0

つまり、Registry.CurrentUserには必要ありません。 – Michael

+0

ok例外をチェックし、欠落しているものを確認します。 –

1

これはUACの問題ではありません。問題の鍵はHKCUにあり、通常はUACによって保護されていません。通常、UACはHKLMのようなキーへのアクセスを削除します。

Vistaのプログラムが来て、管理者特権でそのキーを作成し、通常の状況でキーに書き込むことを禁止する可能性があります。あなたはfalseを渡すことができますか(読み取りのみを意味する)、あなたがそれを開くことができるかどうかを確認できますか?もしそうなら、あなたはそのキーに対する実際のパーミッションを見て、それらが何であるかを見なければなりません。

+0

Tomのコードが私のバニラVistaマシンで動作することを確認できます。 – brianpeiris

+0

注:私のマシンにAdobeBitmapViewerキーが存在しないため、コードを実行したときにキーが作成されました。 – brianpeiris

関連する問題