2016-12-21 20 views
0

私は自分のキオスクをC#で作成しています。そのためにエクスプローラ(Windowsシェル)を殺すつもりで、自動再起動する必要はありません。レジストリの変数を変更する必要がありますが、IDEから実行しようとするとエラーが発生します。レジストリ変数Cを変更できませんC#

System.UnauthorizedAccessException:レジストリキー%KEYPATH%へのアクセスが拒否されました。

実行可能ファイルを管理者として実行しようとすると、エラーメッセージは表示されませんが、何も変わらず、変数は "1"に設定されています。 また、現在のユーザーと誰でもレジストリ内のそのブランチのアクセス許可を編集し、レジストリ内のそのブランチにフルアクセスできます。これは私が

RegistryKey explorerAutoRestart; 
string ear_keypath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"; 

//GETTING ACCESS ERROR HERE 
explorerAutoRestart = Registry.LocalMachine.CreateSubKey(ear_keypath); 
switch (status) 
{ 
    case "0": 
     RegistryKey key = Registry.LocalMachine.CreateSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Winlogon"); 
     key.SetValue("AutoRestartShell", 0x00000000, RegistryValueKind.DWord); 
     key.Close(); 
     break; 

    case "1": 
     explorerAutoRestart.SetValue("AutoRestartShell", 1, RegistryValueKind.DWord); 
     explorerAutoRestart.Close(); 
     break; 
} 

を持つC#コードである私は、この問題を引き起こしているかを知りたいとどのように私は AutoRestartShellの値を変更しない - OpenSubKeyにCreateSUbKeyを変更REG_DWORD

は(パス、真の)のみ変更します へのエラー要求されたレジストリアクセスは許可されていません。

おそらく、Windowsはそのブランチに対して外部編集を許可していませんか?

+0

"SOFTWARE \マイクロソフト\ Windows NTの\ CurrentVersionの\ Winlogonプロセス" は既に存在していますか? "SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion"のいずれかの部分が存在しない場合はありませんか? 'status'はどこに設定されていますか? – ChrisF

+0

FWIW、[キオスクモード](https://technet.microsoft.com/en-us/itpro/windows/manage/set-up-a-device-for-anyone-to-use)は、Windows 10のオプションです。 –

+0

まず第一に、OpenSubKey関数は私に読み取り専用アクセスを与えます。権限に関係なく第二に、私は様々な理由で私のカスタムキオスクが必要です。私は後でシェルを完全に置き換える予定です。ウィンドウ10のキオスクモードでは、MD5ハッシュで保護されたパスワードと私が作成している他のカスタム機能との私のカスタムウィンドウフォームを持つことができませんが、それをチェックします。ありがとう! –

答えて

1

この問題を解決するために管理しました。どうやら、私の鍵はWOW64によってリダイレクトされていて、何とか私にレジストリブランチの許可を与えてくれなかったのですか? はいえ、コード、次の私を救っ:

RegistryKey localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
      RegistryKey regKey = localMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 
        regKey.SetValue("Shell", "bat.exe", RegistryValueKind.String); 
        regKey.Close(); 

Changing the Shell registry

関連する問題