我试图在我的C#代码中添加一个注册表项
HKEY_CLASSES_ROOT\*\shell\blabla我希望用户能够向我的应用程序发送任何文件,有点像Open with UltraEdit之类的。
我没有管理员权限,用户也没有管理员权限。
Registry.SetValue("HKEY_CLASSES_ROOT\*\shell\blabla",null,"FastSearch");字符串path = Application.ExecutablePath;Registry.SetValue("HKEY_CLASSES_ROOT\*\shell\blabla“+”\命令“,null,path +”%1“);
但是,如果我双击一个试图写入相同键的*.reg文件,一切都正常!
那这是为什么?
我有机会通过代码完成这个任务吗?
还是应该更改代码以运行该*.reg文件?
更新:
实际上,*.reg文件并没有像上面提到的那样写入相同的密钥,但是
HKEY_CURRENT_USER\Software\Classes\*\shell\blabla我没注意到。似乎在HKEY_CURRENT_USER\Software\Classes*\shell\blabla下添加的任何内容都添加到HKEY_CLASSES_ROOT\*\shell\blabla.中很抱歉给你造成了混乱。
发布于 2014-08-29 09:17:33
虽然这个问题已经解决了,同时也找到了成功导入*.reg文件的原因,但与C#代码相比,这里有一个完整的答案。
微软描述的根键 (short HKCR)显示了对当前用户有效的文件扩展名关联和COM类注册信息。
这些钥匙在登记册中的实际位置是:
对HKEY_CLASSES_ROOT的注册表写入总是重定向到HKLM\Software\Classes.在HKLM中,对任何密钥的写访问都需要管理特权,这是错误消息的原因。
Microsoft建议直接写入HKLM\Software\Classes或HKCU\Software\Classes,具体取决于更改当前用户的默认值或有效文件关联。
将操作写入HKCU下的密钥不需要管理特权。
HKCR仅用于读取文件扩展名关联和COM类注册信息的当前有效设置,而不用于添加或更改它们。
https://stackoverflow.com/questions/25563161
复制相似问题