C#读取注册表的权限问题

C#读取注册表非常简单方便,指定路径后,设置对应的字段和属性值即可
但是从Windows Vista开始,读取注册表就开始需要权限了。当然可以简单的使用管理员权限打开,或者在程序的安全性中设置其打开方式为管理员都行。但是这样多少还是在客户端后的用户层面的设置。如何才能把些工作放在开放端呢。
经过研究发现有2种办法。
方法一
1、使用ClickOnce设置,这个方法网上都有就是在项目属性的安全性中选择Click Once安全选项。
2、再app.manifast中进行修改,可以在其中看到以下文字

           <security>
         <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <!-- UAC 清单选项
                  如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换 
                  requestedExecutionLevel 节点。

            <requestedExecutionLevel   level="asInvoker" uiAccess="false" />
            <requestedExecutionLevel   level="requireAdministrator" uiAccess="false" />
            <requestedExecutionLevel   level="highestAvailable" uiAccess="false" /> 
            
                  指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。
                  如果要利用文件和注册表虚拟化实现向后 
                  兼容性,则删除 requestedExecutionLevel 节点。
            -->
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
         </requestedPrivileges>
……
   </security>

注册的部分已经说的非常清楚,根据需要进行修改即可。但是无论选择其他任选的2个,在编译时都会报错。其实这里再把Click Once的安全选项关闭即可,因为app.manifest文件已经存在了。

方法二
在C#的RegistryKey中就包括了安全选项的内容。

        private static void SetRegister()
            {
                  string regpath = "SOFTWARE\\Q-Das\\QTrans\\UAES";
                  RegistryKey uaes = Registry.LocalMachine.OpenSubKey(regpath,
                         RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); 
                  if (uaes == null)
                        uaes = Registry.LocalMachine.CreateSubKey(regpath, RegistryKeyPermissionChe ck.ReadWriteSubTree); 
                  uaes.SetValue("Version", "1.0", RegistryValueKind.String);
                  uaes.SetValue("Author", "Andrew Hao", RegistryValueKind.String);
                  uaes.SetValue("LastUpdate", "2013-2-22", RegistryValueKind.String);
                  uaes.SetValue("AppPath", Application.StartupPath, RegistryValueKind.String);

                  object obj = uaes.GetValue("InstallDate", null);
                  if (obj == null)
                        uaes.SetValue("InstallDate", DateTime.Now.ToString(), RegistryValueKind.String);

                  obj = uaes.GetValue("InstallDate", "Failed...");
                  MessageBox.Show(obj.ToString());
            }
上面加黑部分指定了相应的权限,选择FullControl即可获得全部权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值