2012-01-03 55 views
1

我想从注册表中删除一个文件夹。假设我想要删除文件夹从注册表中删除文件夹 - 权限问题

Software\TeamViewer 

我已经写了代码,但它给出了一个异常“你不能写”。我想它的权限&访问权限的某种问题。

string keyapath = @"Software\TeamViewer"; 
RegistryKey regKeyAppRoot = Registry.CurrentUser.OpenSubKey(keyapath); 
regKeyAppRoot.DeleteSubKeyTree(keyapath); 

如何为我的软件授予从注册表中删除文件夹的权限?

编辑: 我有我的系统管理员权限。我是否仍然需要通过我的代码专门为应用程序分配权限?

+0

http://stackoverflow.com/questions/2021831/admin-rights-for-a-single-method,参考这个问题,答案告诉他如何给一个单一的方法管理权限。 – Burimi 2012-01-03 14:51:57

+0

这里是一个伟大的文章阅读理解Windows注册表文件和文件夹 - - http://msdn.microsoft.com/en-us/magazine/cc982153.aspx – MethodMan 2012-01-03 14:53:37

+0

我确实有我的计算机上的管理权限。我仍然需要使用代码专门添加权限。我宁愿使用代码而不是手动方法来完成它。 – 2012-01-03 15:12:05

回答

5

带有一个参数的OpenSubKey方法打开阅读的关键。使用其他变种OpenSubKey方法:

OpenSubKey(String, Boolean) - 通过true第二参数打开与普通的写访问

OpenSubKey(String, RegistryKeyPermissionCheck) 的关键 - 允许chacking的子项在允许一些精确控制

OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights) - 如上所述,但您可以准确指定所需的权利。

有关详细信息,请参阅MSDN。

+0

那我应该使用哪一个? – 2012-01-03 15:17:15

+0

我认为第一个(有一个额外的布尔参数)应该足够你的情况。 – 2012-01-03 15:37:39

+0

您可以使用第一个,但仍可能存在UAC问题。所以结合清晰的方式。 为了能够进行调试,以管理员身份运行VS。 – 2012-01-03 15:42:39

2

您的应用程序需要admin权限来更改注册表中的数据。 为了获得这些权利,您的应用程序的主要部分需要包含一些值,告诉Windows应用程序需要更多权限。

谷歌uac .netuac c#(UAC =用户帐户控制)

或者只是看看这篇文章。

Create and Embed an Application Manifest (UAC)

+0

所以我试着编辑清单文件并将代码更改为''它足够吗? – 2012-01-03 15:23:49

+0

@Sangram - 试试吧? – 2012-01-03 17:13:20

+0

C-F的答案对我有帮助和帮助。非常感谢您的帮助。 – 2012-01-04 11:47:30

1

你应该在项目中创建一个清单文件(右键点击你的项目,添加新项,清单文件)。然后打开它,里面你会看到:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
      <requestedPrivileges> 
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> // Put this to invoke UAC for admin rights 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

然后,当你运行你的应用程序会提示您UAC,然后程序会以管理员身份运行,希望能为您提供所需的访问。

希望这会有所帮助!

+0

我编辑了清单文件并尝试了相同的代码,但它给了我相同的异常“无法写入注册表项”。任何猜测?顺便说一句,我每次运行/调试代码,它将清单文件设置为默认值。 – 2012-01-03 15:35:58

+0

当你说清单文件,你的意思是你有多个? – 2012-01-03 15:39:32

+0

我指的清单文件'bin \ Debug' – 2012-01-03 15:43:48