我目前正在运行Windows 7 x64 machine
。
我编写了以下代码,右键单击添加上下文菜单:
RegistryKey rKey = Registry.ClassesRoot.OpenSubKey("Directory\\Background\\shell", true);
String[] names = rKey.GetSubKeyNames();
foreach (String s in names)
{
System.Windows.Forms.MessageBox.Show(s);
}
RegistryKey newKey = rKey.CreateSubKey("Your Application");
RegistryKey newSubKey = newKey.CreateSubKey("command");
newSubKey.SetValue("", "C:\\Windows\\System32\\notepad.exe");
newSubKey.Close();
newKey.Close();
rKey.Close();
如果我直接在注册表上重复此过程,它可以正常工作,但不能通过此工作。
我也可以访问注册表,因为我添加了一个片段,告诉列出我需要的所有子键,但只是不添加一个。
答案 0 :(得分:5)
我已经测试了你的代码,而且它很好。好。看起来你没有从代码中打开注册表的访问权限。只需按照以下简单步骤操作:
如果要直接从Exe运行程序,请右键单击Exe&选择“以管理员身份运行”选项。
如果您不想以管理员身份运行,请按以下步骤操作:
只需用MyApplication.app替换您的应用程序名称即可。重要的部分是该部分。休息是自动生成的。
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </asmv1:assembly>