首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问注册表似乎与不同的来源不同。

访问注册表似乎与不同的来源不同。
EN

Stack Overflow用户
提问于 2014-08-29 07:01:47
回答 1查看 1.4K关注 0票数 4

我试图在我的C#代码中添加一个注册表项

代码语言:javascript
复制
HKEY_CLASSES_ROOT\*\shell\blabla

我希望用户能够向我的应用程序发送任何文件,有点像Open with UltraEdit之类的。

我没有管理员权限,用户也没有管理员权限。

  1. 如果我在下面的C#代码中这样做,我会得到一个 System.UnauthorizedAccessException

Registry.SetValue("HKEY_CLASSES_ROOT\*\shell\blabla",null,"FastSearch");字符串path = Application.ExecutablePath;Registry.SetValue("HKEY_CLASSES_ROOT\*\shell\blabla“+”\命令“,null,path +”%1“);

  1. 如果我运行Regedit并尝试手动执行该操作,则会得到类似的错误: 错误!无法创建密钥。写入注册表时出错。

但是,如果我双击一个试图写入相同键的*.reg文件,一切都正常!

那这是为什么?

我有机会通过代码完成这个任务吗?

还是应该更改代码以运行该*.reg文件?

更新:

实际上,*.reg文件并没有像上面提到的那样写入相同的密钥,但是

代码语言:javascript
复制
HKEY_CURRENT_USER\Software\Classes\*\shell\blabla

我没注意到。似乎在HKEY_CURRENT_USER\Software\Classes*\shell\blabla下添加的任何内容都添加到HKEY_CLASSES_ROOT\*\shell\blabla.中很抱歉给你造成了混乱。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-29 09:17:33

虽然这个问题已经解决了,同时也找到了成功导入*.reg文件的原因,但与C#代码相比,这里有一个完整的答案。

微软描述的根键 (short HKCR)显示了对当前用户有效的文件扩展名关联和COM类注册信息。

这些钥匙在登记册中的实际位置是:

  • HKEY_LOCAL_MACHINE\Software\Classes (缩写为HKLM\Software\Classes),包含所有使用计算机和
  • HKEY_CURRENT_USER\Software\Classes (简短的HKCU\Software\Classes),包含用户特定的设置,这些设置覆盖来自HKLM\Software\Classes.的默认设置)

HKEY_CLASSES_ROOT的注册表写入总是重定向到HKLM\Software\Classes.在HKLM中,对任何密钥的写访问都需要管理特权,这是错误消息的原因。

Microsoft建议直接写入HKLM\Software\ClassesHKCU\Software\Classes,具体取决于更改当前用户的默认值或有效文件关联。

将操作写入HKCU下的密钥不需要管理特权。

HKCR仅用于读取文件扩展名关联和COM类注册信息的当前有效设置,而不用于添加或更改它们。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25563161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档