Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:无法查看windows注册表中的更改_C#_Regedit - Fatal编程技术网

C#:无法查看windows注册表中的更改

C#:无法查看windows注册表中的更改,c#,regedit,C#,Regedit,没有错误,没有例外,什么都没有。一切似乎都正常,只是注册表保持原样 class Program { static void Main(string[] args) { try { Edit(); } catch (Exception) { Restore(); // n

没有错误,没有例外,什么都没有。一切似乎都正常,只是注册表保持原样

   class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Edit();
            }
            catch (Exception)
            {
                Restore(); // not included in the sample for simplicity
            }
        }

        public static void  Edit()
        {
            Microsoft.Win32.RegistryKey Login;
            Login = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(ConfigurationManager.AppSettings["Login"].ToString());
            Login.SetValue("ServerName", ConfigurationManager.AppSettings["ServerName"].ToString());
            Login.SetValue("ImageServerName", ConfigurationManager.AppSettings["ImageServerName"].ToString());
            Login.Close();

            Microsoft.Win32.RegistryKey Login2;
            Login2 = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(ConfigurationManager.AppSettings["Wow6432NodeLogin"].ToString());
            Login2.SetValue("ServerName", ConfigurationManager.AppSettings["Wow6432NodeServerName"].ToString());
            Login2.SetValue("ImageServerName", ConfigurationManager.AppSettings["Wow6432NodeImageServerName"].ToString());
            Login2.Close();
        }
}
我想某处有个错误。但是没有抛出异常。挡块永远不会被击中

我以管理员的身份运行它。我甚至在没有管理员权限的情况下运行它,但当它应该显示“拒绝访问”之类的内容时,仍然没有错误。我重新启动了笔记本电脑以查看应用的更改,但仍然没有成功

我使用此代码读取最近添加的值,并且可以看到键。但不知何故,这些变化并未得到应用

        Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(ConfigurationManager.AppSettings["Login"].ToString());
        Object o = key.GetValue("ServerName");
        Console.WriteLine(o.ToString());
我正在使用.NET4.5.2,为任何CPU构建,所以:Windows7


我需要提交更改还是什么?

正如@PieterWitvoet在评论中建议的那样,您可能需要使用。这是为了避免WoW64注册表重定向,如下所述:

注意该页末尾的小字体:

要检查使用regedit运行此示例的效果,请检查以下键的值。请注意,应用程序应避免在硬编码注册表路径中使用Wow6432Node

下面是一个你可以做的例子:

static void Edit()
{
    using (var root = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
    using (RegistryKey key = root.CreateSubKey("SOFTWARE\\Homebrew-Testing"))
    {
        key.SetValue("ServerName", "ServerName-Value");
        key.SetValue("ImageServerName", "ImageServerName-Value");
    }
}
请注意,如何舍弃专门处理
Wow6432Node
的代码的第二部分,这在上面链接的文章中是建议不要使用的

的文档说明,如果在32位操作系统上请求64位视图,则返回的密钥将在32位视图中


我希望这有帮助。祝你好运。

你可能会出错。您应该编辑代码,以便查看错误。您可能看到注册表重定向,因为您不是以管理员身份运行。请提供更多的上下文:您的目标是.NET的哪个版本?构建目标体系结构是什么(x86、x64、任何CPU)?您在什么操作系统(7、8、10/x86、x64)上运行此功能?UAC,没有UAC?另外,当您逐行运行程序时,您会看到什么?预期的结果是什么?如何检查某些内容是否已写入注册表。旁白:在这些应用程序设置上,您实际上不需要调用
.ToString()
,索引器应该已经返回了一个字符串。的示例使用了
using
构造。您是否尝试过使用
而不是
Close()
?不完全确定这是否会产生任何影响,但我会尝试一下。您是否尝试过使用
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.**)
而不是
Registry.LocalMachine
?它允许您指定所需的视图(默认值,32位或64位),这样您就可以确定问题是否与注册表重定向有关。