0

I am currently running a Windows 7 x64 machine.

I have written the following code to add a context menu on right click:

    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();                  

If I repeat the procedure directly on the registry, it works, but not via this.

I am also able to access the registry, as I have added a snippet that tells lists all subkeys that I require, but simply does not add one.

4

1 回答 1

5

我已经测试了你的代码,它很好。看起来您没有从代码中打开注册表的访问权限。只需按照以下简单步骤操作:

  1. 关闭您的 Visual Studio。然后以管理员身份运行模式再次打开它。您可以通过右键单击 Visual Studio 链接并选择以管理员身份运行选项来执行此操作。
  2. 打开您的代码并从那里运行它。

如果要直接从 Exe 运行程序,请右键单击 Exe 并选择以管理员身份运行选项。

如果您不想以管理员身份运行,请按照以下步骤操作:

  1. 向您的项目添加一个名为 App.manifest 的新文件;通过从项目中添加一个新文件。
  2. 将以下数据添加到该文件中,休息它会变魔术。

只需将您的应用程序名称替换为 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>
于 2013-04-25T09:40:04.110 回答