C# 设置注册表项不需要';不行。有时

C# 设置注册表项不需要';不行。有时,c#,registry,C#,Registry,我试图在我的C代码中设置一个注册表项,但它并不总是有效。有时有效,有时无效。我开始发疯了。。。 在以前的项目中,我写和读注册表都没有问题,但现在我有了 以下是我使用的代码: string newVersion = "10A"; RegistryKey key = null; try { key = Registry.CurrentUser.CreateSubKey("Software\\stuff1\\stuff2 " + newVersion + "\\" + newVersion +

我试图在我的C代码中设置一个注册表项,但它并不总是有效。有时有效,有时无效。我开始发疯了。。。 在以前的项目中,我写和读注册表都没有问题,但现在我有了

以下是我使用的代码:

string newVersion = "10A";
RegistryKey key = null;
try
{
    key = Registry.CurrentUser.CreateSubKey("Software\\stuff1\\stuff2 " + newVersion + "\\" + newVersion + "\\stuff3\\Settings", RegistryKeyPermissionCheck.ReadWriteSubTree);
    key.SetValue("CopyConvertDone", "1", RegistryValueKind.String);
    key.Flush();
    rep.Message("CopyConvertDone registry key set for revision: " + newVersion);
}
catch (Exception e)
{
    rep.Error(e);
}
finally
{
    if (key != null)
    {
        key.Close();
    }
    else
    {
        rep.Error("Registry key is set to null.");
    }
}
我已经试过但不起作用的: -我没有使用CreateSubKey,而是尝试将write参数设置为true的OpenSubKey。 -添加了.Flush()方法。 -在继续我的程序(需要这个注册表项)之前,暂停(2000)给它一些时间

我没有得到任何错误,并且子项已经存在,但是值(CopyConvertDone)不存在


有人能看到这段代码中的问题并找到可能的解决方案吗?

我觉得这段代码没问题,但是如果它在某段时间正常工作,那么可以使用它查看对注册表的调用以及成功/失败的原因。

我觉得这段代码没问题,但是,如果它在某些时间工作,那么可以使用查看对注册表进行了哪些调用,以及哪些调用成功/失败。

看起来是正确的。也许试着去掉冲洗液。从MSDN:
仅当必须绝对确定注册表更改已记录到磁盘时,应用程序才应调用Flush。一般来说,如果需要,很少使用冲洗。


您已在finally语句中关闭注册表项。

看起来正确。也许试着去掉冲洗液。从MSDN:
仅当必须绝对确定注册表更改已记录到磁盘时,应用程序才应调用Flush。一般来说,如果需要,很少使用冲洗。


您已经在finally语句中关闭了注册表项。

刚才我也遇到了类似的情况,我按照Antony的建议使用进程监视器,发现Windows 7正在将我的写入重定向到
HKCU\Software\Classes\VirtualStore\MACHINE
下的注册表项


只是一个指针,以防其他人有此问题。

我刚才也遇到过类似的情况,我按照Antony的建议使用进程监视器,发现Windows 7将我的写入重定向到
HKCU\Software\Classes\VirtualStore\MACHINE
下的一个键


只有一个指针,以防其他任何人出现此问题。

您能否澄清当它失败时会发生什么?您是否在注册表中得到某种异常或只是没有更改?是否实际调用了上述代码?您能否澄清当它失败时会发生什么?您是否在注册表中得到某种异常或只是没有更改?是实际调用上述代码?请参见此SO答案了解原因:请参见此SO答案了解原因: