我正在尝试在我的C#代码中添加一个注册表键
HKEY_CLASSES_ROOT\*\shell\blabla
我希望用户能够将任何文件发送给我的应用程序,就像“使用UltraEdit打开”一样。 我没有管理员权限,用户也没有管理员特权。
If I am doing that in my C# code as posted below, I get a
System.UnauthorizedAccessException
Registry.SetValue("HKEY_CLASSES_ROOT\\*\\shell\\blabla", null, "FastSearch"); string path = Application.ExecutablePath; Registry.SetValue("HKEY_CLASSES_ROOT\\*\\shell\\blabla" + "\\Command", null, path + " \"%1\"");
If I run Regedit and attempt to do it manually myself, I get a similar error:
Error! Key could not be created. Error when writing to the registry.
但是,如果我双击一个试图写入相同键的*.reg文件,一切都能正常工作!
那么为什么会这样呢?
我有机会通过代码完成这个任务吗?
还是我应该只是改变我的代码来运行那个*.reg文件?
更新:
实际上,*.reg文件没有像上面所述的那样写入相同的键,但是
HKEY_CURRENT_USER\Software\Classes\*\shell\blabla
我没有注意到这个问题。似乎在HKEY_CURRENT_USER\Software\Classes*\shell\blabla下添加的所有内容也会被添加到HKEY_CLASSES_ROOT\*\shell\blabla中。对于造成的困惑,我感到抱歉。
HKEY_CLASSES_ROOT
作为shell扩展了,因为实际上它是位于需要管理员特权的HKEY_LOCAL_MACHINE\Software\Classes
中的,因为那里的所有更改都会影响到所有用户帐户。相反,应将shell扩展添加到HKEY_CURRENT_USER\Software\Classes
中,该位置可在没有管理员权限的情况下进行修改。UltraEdit只为当前用户注册其shell扩展,因为每个使用计算机的用户都应该选择使用shell扩展或者不使用。 - Mofi