【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法

C#实现西门子PLC OPC DA通信实战指南 OPC DA是工业自动化中连接上位机与西门子S7系列PLC的经典协议,基于DCOM架构,依赖Windows系统权限、防火墙策略与PLC端DB块配置。其核心原理在于通过COM接口访问第三方OPC服务器(如Softing)暴露的地址空间,实现变量读写与实时数据订阅。技术价值体现在对老旧产线的无缝兼容、低资源占用及高调试效率,广泛应用于设备数据采集、HMI开发与MES系统对接等场景。本文聚焦C# WinForms客户端开发,详解PLC端DB块非优化访问设置、DCOM安全配置、ItemID映射规范及断线自动重连机制 阅读详情

    在XP/2003下调试得好好的程序,到了windows7下,却抛出“不允许所请求的注册表访问权”的异常,该异常就在读写注册表时引发,例:

public class Program
    {
        public static void SetAutoRun(string keyName, string filePath)
        {
            using (RegistryKey runKey = Registry.LocalMachine.OpenSubKey(@"software\microsoft\windows\currentversion\run", true))
            {
                runKey.SetValue(keyName, filePath);
                runKey.Close();
            }
        }

        static void Main()
        {
            string keyName = "TestAutoRun";
            string fliePath = @"D:\CSharpProject\CSharp_Learn\MyDelegate.exe";
            SetAutoRun(keyName, fliePath);
        }
    }
}

该程序如在windows 7下运行,需以管理员权限运行。

 

【方法一】

注册表

代码访问安全性策略必须向使用 Microsoft.Win32.Registry 类访问注册表的代码授予 RegistryPermission。这个权限类型可以用于限制对特定注册表项和子注册表项的注册表访问,还可以控制代码读取、写入或创建注册表项和已命名的值的能力。

约束注册表访问

要约束代码对特定注册表项的访问,可以使用带 SecurityAction.PermitOnly 的 RegistryPermissionAttribute。下面的属性确保代码仅可以读 HKEY_LOCAL_MACHINE\SOFTWARE 下面的 YourApp 注册表项(及子项)。

[RegistryPermissionAttribute(SecurityAction.PermitOnly,
Read=@"HKEY_LOCAL_MACHINE\SOFTWARE\YourApp")]
public static string GetConfigurationData( string key, string namedValue )
{
return (string)Registry.
LocalMachine.
OpenSubKey(key).
GetValue(namedValue);
}

请求 RegistryPermission

要记录代码的权限要求,并确保在代码访问安全性策略没有授予它充分的注册表访问权限时程序集无法加载,应当添加带 SecurityAction.RequestMinimum 的程序集级 RegistryPermissionAttribute,如下面的示例所示。

[assembly:RegistryPermissionAttribute(SecurityAction.RequestMinimum,
Read=@"HKEY_LOCAL_MACHINE\SOFTWARE\YourApp")]

 

【方法二】

添加 应用程序清单文件,在其中加入

<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 level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>

 

修改代码,如下:

System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal( identity );
if(principal.IsInRole( System.Security.Principal.WindowsBuiltInRole.Administrator ))
{
    // 修改注册表
}
else
{
       System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
       startInfo.FileName = System.Windows.Forms.Application.ExecutablePath; // 获取当前可执行文件的路径及文件名 
        //以下 Args 为启动本程序的对应的参数
        startInfo.Arguments = String.Join( " ", Args );
       startInfo.Verb = "runas";
       System.Diagnostics.Process.Start( startInfo );
}


 

双层优化入门(1)—基本原理与求解方法(附matlab代码) 双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。 阅读详情

相关推荐

Transformer论文解读

Transformer有多牛逼不用多说,时隔7年我们再来看看论文原文,看看这篇深刻改变世界的文章都说了什么。当然逐字逐句解读已经意义不大,我们只列考点。

xian0710830114的专栏 4402

不允许所请求的注册表访问权。 (mscorlib)

不允许所请求的注册表访问权。 (mscorlib) 在新建数据库的时候一直提示这个问题。

gykthh的专栏 4万+

MATLABGUI读取文件并将路径显示在文本框中

MATLABGUI读取文件并将路径显示在文本框中

m0_50305149的博客 2649

【C#】问题:不允许所请求的注册表访问权

C# 写注册表抛异常System.Security.SecurityException:“不允许所请求的注册表访问权。” 解决方案: 因为在win7下,VS访问注册表HKEY_LOCAL_MACHINE,即程序中的LocalMachine是需要管理员身份运行的。但是访问HKEY_CURRENT_USER是没问题的,所以将LocalMachine改成CurrentUser即可 RegistryKe...

丫丫 8360

机载电脑与飞控串口通信(实测读取飞控IMU数据)《一、香橙派5max启动串口UART通信与飞控板通信,一次必通!》《二、allspark1与PIX6C通信踩坑及出坑》《三、orinnx载板与飞控通信》

机载电脑与飞控串口通信(实测读取飞控IMU数据)《一、香橙派5max启动串口UART通信与雷迅v5nano飞控板通信,一次必通!》《二、阿木机载电脑allspark1与PIX6C通信踩坑及出坑》,还有如何打开飞控串口以及如何提高飞控IMU频率。

2402_82745259的博客 3467

AD4030-24BBCZ详细资料 Analog Devices 模数转换器 - ADC 24-Bit, 2 MSPS, SAR ADC

AD4030-24BBCZ详细资料  Analog Devices 模数转换器 - ADC 24-Bit, 2 MSPS, SAR ADC

Chen_YYan的博客 794

安全性异常:不允许所请求的注册表访问权 EventLog

症状使用 ASP.NET 在事件日志中创建一个新的事件源时,您可能会收到下面的错误信息:System.Security.SecurityException:Requested registry access is not allowed. 原因默认情况下,ASP.NET 工作进程的用户令牌是 ASPNET(或者,对于 Internet 信息服务 [IIS] 6.0 上运行的应用程序是 Netwo...

weixin_33774883的博客 506

如何找回mysql删除的表_mysql误删表如何恢复,恢复被删除表的步骤说明

小编寄语想必大家都知道,Oracle ACE李真旭(Roger)是国内最专业的Oracle 数据库恢复专家。但知识都是触类旁通,真正的专家,从来不会局限在一个方向上。今天分享的内容,是他在MySQL数据恢复上所做的尝试。本文主要分享在没有备份的情况下,MySQL数据库如何恢复被删除的表。包含两个主要的场景:1、drop table后的恢复2、truncate table后的恢复正文:我们都知道,M...

weixin_35725389的博客 6783

不允许所请求的注册表访问权

用asp.net(vb.net)访问Oracle的时候遇到这样的调试错误: “/OracleWeb”应用程序中的服务器错误。 安全性异常 说明: 应用程序试图执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别。 异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权。 ...

bieli5211的博客 2412

在 SAP BTP 中通过 MTA 自动创建 Service Broker 的原理与实战

本文探讨了如何在SAP BTP的Cloud Foundry环境中通过MTA部署自动创建和注册Service Broker。传统手动注册方式存在依赖管理员、环境一致性差等问题。通过MTA部署可实现自动化Broker注册,利用占位符生成安全凭证,并确保平台端与应用端认证一致。文章详细解析了关键配置参数,包括create-service-broker标志、Broker名称、认证凭据和访问URL的设置方法。这种基础设施即代码(IaC)方式能提升DevOps实践水平,使服务注册成为应用部署流水线的有机组成部分。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

基于STM32设计的自动追光系统(项目资料ID:2)

基于STM32设计的自动追光系统主要由光敏采集电路、单片机核心板电路和步进电机控制电路构成。通过光敏电阻采集环境光强信息,经 STM32 单片机处理后,控制步进电机转动,实现对光源的自动追踪。该系统具有响应速度快、追踪精度较高等优点,可应用于太阳能发电、智能照明等领域,为相关场景提供高效的光资源利用方案。

以培养嵌入式工程师为己任 1万+

winform 创建新注册表时出现“不允许所请求的注册表访问权”,解决办法

首先声明我用的是win7系统和VS2012。 开始创建以下代码后,      try             { RegistryKey hm=Registry.LocalMachine;                  RegistryKey software = hm.OpenSubKey("HARDWARE",true);                RegistryKey m

u014653068的博客 1万+

大模型测试人员完整学习体系(分层成长路线 + 知识框架 + 落地实操)

本文系统构建了大模型测试工程师的4级能力成长体系:L1(测试执行)-L2(专项测试)-L3(质量体系)-L4(行业标准),详细拆解了每个阶段的核心技能图谱。重点包括:入门层需掌握传统测试基础和大模型产品逻辑;进阶层需精通Prompt用例设计、RAG测试、安全对齐、自动化评测等专项能力;高级层聚焦评测平台搭建与质量体系建设;专家层深入算法对齐与行业标准制定。文章配套提供了分阶段技术工具栈、3-12个月学习路径及5类实战项目建议,形成了一套完整的大模型测试人才能力培养框架。

SmallBull的博客 453

【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法...

原文:【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法 项目 - 属性 - 安全性,“使用ClickOnce”,修改app.mainfest,再取消“使用ClickOnce” 【另有一篇参考文章:http://blog.youkuaiyun.com/wonsoft/article/details/6598407】 ...

weixin_33924312的博客 206

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[C#][转载]注册表访问读写权限解决方法

【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法 项目 - 属性 - 安全性,“使用ClickOnce”,修改app.mainfest,再取消“使用ClickOnce” 【另有一篇参考文章:http://blog.youkuaiyun.com/wonsoft/article/details/6598407】 在XP/2003下调试得好好的程序,到了windows7下,却抛出“不允许所请求的注册表访问权”的异常,该异常就在读写注册表时引发,例: vie...

FL1623863129的博客 4655

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C#操作注册表

一、操作注册表 C#中操作注册表相当方便,只需引入命名空间Microsoft.Win32即可,命名空间中的静态类Registry,封装了注册表的常用根路径。 /** using Microsoft.Win32 Registry.LocalMachine //本地计算机的配置数据,对应注册表基项 HKEY_LOCAL_MACHINE。 Registry.ClassesRoot

达拉斯母牛 1111

C#System.Security.SecurityException解决方法

C#System.Security.SecurityException解决方法 问题描述: “System.Security.SecurityException”类型的未经处理的异常在 mscorlib.dll 中。 其他信息:不允许所请求的注册表访问权。 问题来源:        原本是在windows7上编写的程序可以正常运行,但是在系统升级到windows10的

stella_alash的博客 1万+

Requested registry access is not allowed

Requested registry access is not allowed(不允许所请求的注册表访问权) 今天在写一个Service程序时候遇到这个问题,因为在家里电脑上没有问题的(XP),不成想在公司的Win7上居然出现这个问题,猜测应该是Win7的权限管理问题。 问题出现在如下创建一个EventLog的代码中, publicvoidLogEvent(S...

weixin_34327761的博客 466

C# 原生编码智能体运行时 SharpClawCode

协议层作为 SharpClawCode 架构的最底层,承担着定义整个系统数据契约的核心职责。该层的设计遵循了"协议优先"的架构思想,即先定义清晰的数据契约,再在此基础上构建业务逻辑。项目包含了所有跨组件通信所需的 DTOs(数据传输对象)、枚举类型、事件定义和命令结果结构。这些 DTO 的设计注重不可变性和显式性,广泛采用 C# 9.0 引入的record类型,使得数据对象在创建后不可修改,通过with表达式生成变体,这天然地适合事件溯源模式中事件对象的不可变特性。事件定义是协议层的特别重要组成部分。

FRbRpYwL1的博客 253
上一篇: C#编译时提示未能解析引用的程序(被引用项目编译成功,但引用项目编译时却不能正常引用)
下一篇: C#重载操作符“==”执行时引发“Process is terminated due to StackOverflowException.”的解决办法
wonsoft
博客等级 码龄23年 228粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值