win7-64 c#development的注册表权限问题

时间:2009-11-20 13:13:09

标签: registry

vs2008,c#:首次运行我的winforms应用程序时,需要在HKLM \ Software中创建一个设置。显然是权限问题,但要求是用户可能没有管理员权限,并且最终用户无法手动设置注册表权限。我可以在安装过程中创建密钥,但有没有办法从程序中执行此操作?

RegistryKey key = Registry.LocalMachine.CreateSubKey(@“Software \ MyCompany \ MyApp 1.0”);

只是从vs2008测试应用程序会出现此错误: 访问注册表项“HKEY_LOCAL_MACHINE \ Software \ MyCompany \ MyApp”被拒绝。

如果我以管理方式运行它没有错误。

2 个答案:

答案 0 :(得分:1)

从您的程序执行此操作的唯一方法是执行在具有足够权限的帐户下写入注册表的代码。您可以查看此article,其中提供了模拟用户的示例。使用此方法时需要考虑一些安全性considerations,因此恕我直言,最好的方法是在程序安装期间执行此操作。

答案 1 :(得分:1)

这是Win7的UAC。如果要访问注册表项,则必须在清单中设置程序需要管理员权限或轻松删除它。所以你可以写

  <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>

for admin rights into the app.manifest in your properties folder or you write

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
      </requestedPrivileges>
    </security>
  </trustInfo>

如果您不想使用管理员权限。