C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: システム関連のレジストリへの書き込み方法


(過去ログ 66 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■38447 / inTopicNo.1)  システム関連のレジストリへの書き込み方法
  
□投稿者/ ぱお (1回)-(2009/07/14(Tue) 21:48:03)

分類:[C#] 

Visual C# 2008、OSはWindowsVistaHomeEditionです。

システム関連のレジストリの値を書き換えや削除しようと思いますが、

  Microsoft.Win32.RegistryKey Reg = Microsoft.Win32.Registry.LocalMachine.OpenSubKey
  (@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32", true);

とすると「要求されたレジストリアクセスは許可されていません」で不可能でした。
そこでアクセス権を変更すればいいかと思い

  Microsoft.Win32.RegistryKey Reg = Microsoft.Win32.Registry.LocalMachine.OpenSubKey
  (@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32", 
   Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree,
   System.Security.AccessControl.RegistryRights.ChangePermissions);

としてもやはり「要求されたレジストリアクセスは許可されていません」です。
RegistryRightsにはWriteKeyとかいろいろ試しましたが、読み込みしか許可されず書き込むものは拒否されます。

どのようにすればシステム関連のレジストリの値を書き換えや削除できるのでしょうか?
どうかご教授願います。

引用返信 編集キー/
■38448 / inTopicNo.2)  Re[1]: システム関連のレジストリへの書き込み方法
□投稿者/ なちゃ (313回)-(2009/07/14(Tue) 22:28:34)
プロセス自体を管理者権限で起動しないと無理です。
※exeにマニフェストつけるか、明示的に管理者として起動するか

引用返信 編集キー/
■38450 / inTopicNo.3)  Re[2]: システム関連のレジストリへの書き込み方法
□投稿者/ ぱお (2回)-(2009/07/15(Wed) 00:22:28)
回答ありがとうございました。
マニフェストのことは知りませんでした。
マニフェスト付けたら OpenSubKey は成功しました!

しかしここで新たな問題が。
実際にレジストリに書き込もうとすると「許可されていない操作を実行しようとしました」と出てうまくいきませんでした。

ルールのせい?と思い
string user = Environment.UserDomainName + "\\" + Environment.UserName;
System.Security.AccessControl.RegistrySecurity rs = new System.Security.AccessControl.RegistrySecurity();

System.Security.AccessControl.RegistryAccessRule rule = new System.Security.AccessControl.RegistryAccessRule
(user,
RegistryRights.FullControl,
InheritanceFlags.ContainerInherit,
PropagationFlags.InheritOnly,
AccessControlType.Allow);

rs.AddAccessRule(rule);
Reg.SetAccessControl(rs);
Reg.SetValue("てすと", "tes.tes");

こんな感じで書いてみましたが、Reg.SetAccessControl(rs); の部分でやはり「許可されていない操作を実行しようとしました」です。
どうすれば書き込み、削除ができるのかご教授願います。
引用返信 編集キー/
■38453 / inTopicNo.4)  Re[3]: システム関連のレジストリへの書き込み方法
□投稿者/ オショウ (273回)-(2009/07/15(Wed) 08:15:45)
No38450 (ぱお さん) に返信
> 回答ありがとうございました。
> マニフェストのことは知りませんでした。
> マニフェスト付けたら OpenSubKey は成功しました!
> 
> しかしここで新たな問題が。
> 実際にレジストリに書き込もうとすると「許可されていない操作を実行しようとしました」と出てうまくいきませんでした。

  Vista Ultimate SP1 ですが・・・

        Dim regkey As Microsoft.Win32.RegistryKey

        regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32", True)

        regkey.SetValue("てすと", "tes.tes")

        regkey.Close()

  と書いて問題無く書き込めましたが・・・

※ 当然、管理者権限設定しています。

以上。参考まで・・・

引用返信 編集キー/
■38454 / inTopicNo.5)  Re[3]: システム関連のレジストリへの書き込み方法
□投稿者/ オショウ (274回)-(2009/07/15(Wed) 08:53:06)
No38450 (ぱお さん) に返信
> 回答ありがとうございました。
> マニフェストのことは知りませんでした。
> マニフェスト付けたら OpenSubKey は成功しました!
>
> しかしここで新たな問題が。
> 実際にレジストリに書き込もうとすると「許可されていない操作を実行しようとしました」と出てうまくいきませんでした。
>
> ルールのせい?と思い

  ルールではないです。

  わざわざ.ChangePermissionsとか指定するなら、.FullControlとすれば、書き込めます。

※ スペルミスしていたらすいません・・・

以上。
引用返信 編集キー/
■38467 / inTopicNo.6)  Re[4]: システム関連のレジストリへの書き込み方法
□投稿者/ ぱお (3回)-(2009/07/15(Wed) 20:26:48)
ご指摘ありがとうございました。

改めてVSから実行してみると
「このタスクを実行するには、アプリケーションのアクセス許可を引き上げる必要があります」
と表示され、
「異なる資格情報で再起動」
を選択してVS再起動されたところ無事動作いたしました!

作成される実行ファイルも当然動作いたしました。
前回は再起動のプロセスを踏まない状態で動かしていたのでうまくいかなかったのかもしれません。

おかげさまで希望どおりの動作ができました。
回答いただいた「なちゃ」さん、「オショウ」さん、本当にありがとうございました。
解決済み
引用返信 編集キー/
■38468 / inTopicNo.7)  Re[5]: システム関連のレジストリへの書き込み方法
□投稿者/ ぱお (4回)-(2009/07/15(Wed) 20:30:36)
追伸ですが、オショウさんのおっしゃるとおり単に引数にTrueを付ける方法でいけました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -