9

これに答える前に、「簡単な Google 検索を実行してください」と答えてください。私はすでに持っていることを指摘したいと思います。これが状況です。レジストリキーの値を変更しようとする次の方法があります。私が得ている問題は、キーを writeable として開いたにもかかわらず、実行すると UnauthorizedAccessException がスローされることです。私はVisual Studioを管理者として実行していますが、マニフェストファイルを使用して小さな.exeを作成しようとしましたが、管理者として実行することを強制し、コードを実行できませんでした。キーは既に存在します。CreateKey メソッドに入ろうとしません。これがコードのブロックです。

Path = "S-1-5-21-1644491937-1078145449-682003330-5490\Software\Microsoft\Windows\CurrentVersion\Policies\System"
Key = "DisableTaskMgr"
NewValue = 1

public OperationResult ModifyKey()
    {
        OperationResult result = new OperationResult();

        if (!Path.IsNullOrEmptyTrim())
        {
            if (!Key.IsNullOrEmptyTrim())
            {
                try
                {
                    var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, true);

                    if (key != null)
                    {
                        key.SetValue(Key, NewValue);

                        key.Close();
                    }
                    else
                    {
                        result = CreateKey();
                    }
                }
                catch (Exception ex)
                {
                    result.SetFail("Error accessing registry", ex);
                }
            }
            else
            {
                result.SetFail("Registry key was null");
            }
        }
        else
        {
            result.SetFail("Registry path was null");
        }

        return result;
    }

各 OpenSubKey 呼び出しを書き込み可能に設定するレジストリ ツリーを手動でたどる必要がありますか? 私もこれを試しましたが、それでも同じエラーがスローされました...

4

7 に答える 7

16

あなたのキーの変数で

var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, true);

への変更

var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, RegistryKeyPermissionCheck.ReadWriteSubTree);  
于 2012-08-01T22:21:47.053 に答える
4

アクセスルールとパーミッションを設定してみましたか?

 string user = Environment.UserDomainName + "\\" + Environment.UserName;
 RegistryAccessRule rule = new RegistryAccessRule(user,
        RegistryRights.FullControl,
        AccessControlType.Allow);        
 RegistrySecurity security = new RegistrySecurity();
 security.AddAccessRule(rule);
 var key = Microsoft.Win32.Registry.Users.OpenSubKey(subKeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl);
 key.SetAccessControl(security);
于 2012-08-01T22:35:04.797 に答える
3

コードで発生する可能性のある問題の 1 つは、Path変数が文字をエスケープしない文字列に設定されていること\です。次のようなものはどうですか:

Path = @"S-1-5-21-1644491937-1078145449-682003330-5490\Software\Microsoft\Windows\CurrentVersion\Policies\System";
于 2012-08-01T22:06:04.727 に答える
3

何が起こっているのかを把握するための最後の努力として、ローカル システム アカウントとして実行されるこのコードをテストするための簡単なサービスを作成しました。これは、コードを試して実行するために考えられる最高の特権です。これらの権限でコードを実行するとうまくいきました。

ウイルス対策についても指摘してくれた0_ _ ___0Charlehに特に感謝します。ログを確認したところ、私の変更を隔離しようとしていたことがわかりました。システムユーザーがこれらの変更を行うのを止めることはないと思います。

これについて多くの調査を手伝ってくれたSorceriにも特に感謝します。

結論として、断続的で非常に奇妙な動作が発生している場合は、ウイルス スキャナーとアクセス許可を確認してください。

于 2012-08-02T16:24:28.330 に答える
-2

許可を dword にのみ設定します。レジストリを開き、最後のフォルダー パスで右クリックして許可を設定し、[すべてのアプリケーション] を選択して [トータル コントロール] をオンにする必要があります。お役に立てれば幸いです。

于 2016-03-10T17:07:34.373 に答える