2009-11-20 36 views
0

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

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

仅从vs2008测试应用程序会产生此错误: 拒绝访问注册表项'HKEY_LOCAL_MACHINE \ Software \ MyCompany \ MyApp'。

如果我运行它作为管理没有错误。

回答

1

从您的程序执行此操作的唯一方法是执行代码,该代码在具有足够权限的帐户下写入注册表。你可以看看这个article,它给出了一个冒充用户的例子。有一些安全considerations要考虑到这种方法,恕我直言,最好的办法是在程序安装过程中执行此操作。

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> 

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