Tag: 注册表

如何编辑gpedit政策

我想问一下如何使用C#编辑gpedit.msc策略?

检查注册表权限而不抛出exception

我有一段这样的代码 try { RegistryKey regKey = Registry.LocalMachine.CreateSubKey(“SOFTWARE\\xxxx\\yyyyy”); // more code } catch { } 我不喜欢使用空的catch块。 但是,它很有用,因为如果用户没有访问注册表的权限,则不应该执行任何操作。 这段代码被多次调用,除了一个不好的做法,我认为它的性能很差。 我一直在寻找一种方法来检查注册表权限,然后再尝试访问它,但是我发现这样做的唯一方法就是检查一个例外。 RegistryPermission.Demand() 并检查一个例外。 所以,这对初始方法没有任何好处。 ¿有没有办法检查注册表访问权限,而不是人为抛出或必须检查exception? 编辑: 好吧,看起来.NET首选的方法是尝试访问资源并检查exception。 Yannick指出的文章显示了处理Windows安全模型,手动查找所需访问权限的复杂程度。 所以,我要做的是稍微重新设计这个代码,这样它只检查一次访问(捕获exception)并保留该信息,而不是不断地抛出exception。 这样做的缺点是,如果用户“动态”更改安全设置,代码将继续拒绝访问注册表。 但是,如果没有一种简单而干净的检查访问方式,这是首选。

使用C#将值写入注册表

我正在创建一个C#应用程序,它将监视对注册表所做的更改,并在用户登录时将它们写回注册表。 到目前为止,我已经监控变化,报告它们,将文件夹,密钥和值写入文本文件。 我现在正处于需要从文件中取出值并将它们放回注册表的位置。 现在我看了各种教程,但没有一个能够回答我的问题/问题,所以例如我希望改变的注册表项是: HKEY_USERS \ S-1-5-21-2055990625-1247778217-514451997-41655 \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Windows Messaging Subsystem \ Profiles \ Outlook \ 0a0d020000000000c000000000000046 01020402的值及其中包含的内容 我想要做的就是回写它并根据需要更改值。 我目前有3个字符串,一个包含键位置,一个包含值,最后一个是值的内容,尽管我可以轻松地更改字符串操作以获取并且不能获得我需要或不需要的任何内容。 因此,如果有人可以为我提供一种写作的方式,那将是值得赞赏的。 PS所以你知道,该特定值是一个二进制值,我转换为字符串进行存储。 如果您需要任何进一步的信息,请告诉我。 任何帮助将不胜感激….谢谢 我正在使用的编辑代码: public class reg { public void write(string key, string valueName, string value) { Byte[] byteValue = System.Text.Encoding.UTF8.GetBytes(value); Registry.SetValue(key, valueName, value, RegistryValueKind.Binary); […]

创建注册表项时出现UnauthorizedAccessException

我正在研究如何在Windows上下文菜单中添加一个快捷方式到我的应用程序。 我偶然发现了这篇文章。 这是它用于在注册表中创建密钥的代码。 private void btnAddMenu_Click(object sender, System.EventArgs e) { RegistryKey regmenu = null; RegistryKey regcmd = null; try { regmenu = Registry.ClassesRoot.CreateSubKey(MenuName); if(regmenu != null) regmenu.SetValue(“”,this.txtName.Text); regcmd = Registry.ClassesRoot.CreateSubKey(Command); if(regcmd != null) regcmd.SetValue(“”,this.txtPath.Text); } catch(Exception ex) { MessageBox.Show(this,ex.ToString()); } finally { if(regmenu != null) regmenu.Close(); if(regcmd != null) regcmd.Close(); } } 问题是如果我通过我的管理员帐户运行它,它工作正常。 但是,当我通过不具有管理员权限的其他帐户执行此操作时,它会抛出此exception。 system.unauthorizedaccessexception […]

在Wow6432Node中编写注册表值而不重定向

此代码插入注册表值 Microsoft.Win32.RegistryKey key; key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(“SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION”); key.SetValue(“MyBrowser.exe”, 8000); textBox1.Text = key.GetValue(“MyBrowser.exe”).ToString(); key.Close(); 在Windows 32位工作,但在64位插入wow6432node如何禁用重定向?

64位Windows上的注册表重定向

我正在运行64位Windows,我想使用C#创建注册表项HKCU\Software\Classes\Wow6432Node\CLSID\{myguid}\InprocServer32 。 我应该告诉它写什么注册表项,以便将它重定向到上面的键? 这也适用于32位Windows。 我正在编译我的应用程序以定位x86。

从注册表中检索文件安装路径

我正在创建一个WPF实用程序,它需要访问本地机器的注册表,然后找出该程序的安装路径。 我通过Regedit导航到密钥,它在数据中显示了名称,类型和数据,它显示了安装路径,我想提取安装路径。 我知道我需要在注册表中导航到这个键: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \ 然后我需要访问此密钥中的文件夹,其中包含有关安装路径的信息。 –

处理RegistryKey还会关闭吗?

正如标题所说。 另外,反过来; 会关闭一个RegistryKey处理它吗? 我查看了所有可以找到的文档,并且在任何地方都没有提及。

为什么我不能在64位机器上正确读取HKCU中的32位注册表值?

我对Windows 7注册表问题感到困惑,虽然各种问题和答案让我有了一些方法,但我见过的那些问题解决了我的特定问题。 我不知道其他Windows版本是否会影响这个问题,但我们都有win7x64机器。 我们的工作中有各种各样的工具,一些C ++,一些C#,一些python(2.6)等。我们还运行32位和64位工具。 过去,我们很高兴在HKLM存储注册信息。 我们一直在努力将事情转移到HKCU 。 关于是否要这样做,影响UAC等,我们已经进行了很多讨论。我们真的想尝试采取这一举措。 那说: 我们无法从HKCU/software/CompanyABC/App读取/编写注册表项。 我们在python中编写了一个安装app ,使用_winreg将注册表项写入上述位置。 我们是否指定KEY_WRITE | KEY_WOW64_32KEY或只是KEY_WRITE,值被写入HKCU/Software/WOW6432Node/companyABC/app 。 精细。 然后我有一个C#应用程序试图读取这些值。 使用Microsoft.Win32.Registry ,我打开子项(’HKCU / Software / CompanyABC / app’),我没有看到我的值。 事实certificate我看到以下行为: 从HKLM读取/写入注册表项时,这些东西都可以正常工作。 python应用程序将写入HKLM/Softare/Wow6432Node/CompanyABC/app ,C#代码将从该位置读取。 考虑到我们如何构建C#应用程序以及通过python编写注册表值,这一切都是正确的 从HKCU读取/写入注册表值,我得到不同的行为。 _winreg函数将写入HKCU/Sofrware/Wow6432Node/CompanyABC/app ,但C#应用程序将从HKCU/Software/CompanyABC/app读取。 C#应用程序是作为x86应用程序构建的(不是任何CPU而不是x64)所以我假设应用程序将被正确地重定向到wow6432Node ,但它似乎没有。 经过一番调查后, HKCU/Software似乎有所不同。 本文似乎表明该区域是“共享”而未重定向。 如果是这种情况,那么我无法理解为什么我们的python应用程序(再次使用_winreg)正在写入使用Wow6432Node HKCU中的某个位置 – 看起来它应该在没有重定向的情况下编写它。 我想它可能是_winreg一个bug。 我真的想避免在我们的工具中明确地使用WOW6432Node ,但这就是我今天所处的位置。 任何人都可以向我解释如何使32位和64位进程的注册表访问进入HKCU正常工作,而不必求助于32位配置单元的硬编码路径?

在C#中读取注册表项

我正在读取注册表项的值: Microsoft.Win32.RegistryKey key; key = *someLongPathHere*; 并将值显示到标签: string a = (string)key.GetValue(“”);//a default value label1.Text = a; 它显示: {F241C880-6982-4CE5-8CF7-7085BA96DA5A} 这是最正确的,除了第一个下划线,它存在于原始值中: {_F241C880-6982-4CE5-8CF7-7085BA96DA5A} 为什么会这样? 即缺少下划线? 此外,在阅读密钥后,我是否必须关闭密钥或其他任何东西? 我该怎么做?