Registry.GetValue()在Web App中工作,但在Console App中不起作用

时间:2018-03-27 22:27:13

标签: c# winapi registry console-application

以下代码在十几个内部网Web应用程序中使用完美无缺。

public static string dbConnectionStringAIMS = RegRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\MNI_APPS", "sql.connection.aims");
public static string dbConnectionStringDYN = RegRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\MNI_APPS", "sql.connection.dynamics");


public static string RegRead(string keyName, string valueName) {

    string retVal = Convert.ToString(Registry.GetValue(keyName, valueName, ""));

    return retVal;

}

但是,当我将其剪切并粘贴到Windows控制台应用程序中时,它会构建干净,并且运行时不会崩溃,但始终返回null 。注册密钥存在如图所示,并且如上所述,此代码是使用相同的密钥从工作的Web应用程序中删除的。

我能想到的观察和差异:

Web应用程序正在Web服务器上,在Active Directory服务帐户下运行的AppPool中的http上下文中运行。

此控制台应用程序正在我的桌面上运行(可能是我自己的凭据?)

我的本​​地注册表具有与Web服务器完全相同的HKLM密钥和值。

其他SO文章中似乎有不同的语法建议先使用Registry.LocalMachine.OpenSubKey(),然后再使用.GetValue()。的所以...

public static string dbConnectionStringAIMS = RegRead(@"SOFTWARE\OMNI_APPS", "sql.connection.aims");
public static string dbConnectionStringDYN = RegRead(@"SOFTWARE\OMNI_APPS", "sql.connection.dynamics");


public static string RegRead(string keyName, string valueName) {

    RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName, false);

    string retVal = (string)key.GetValue(valueName);

    return retVal;

}

返回null。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这终于奏效了:

> p_cyan
[1] 0.2
> p_cyan_not_v1
[1] 0.8
> p_cyan_not_v2
[1] 0.8

我阅读了其他SO文章,指出读取32位操作系统注册表和64位操作系统注册表之间的区别,并在此处找到代码:

Registry Key Get Value returns NULL