以下代码在十几个内部网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。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
这终于奏效了:
> p_cyan
[1] 0.2
> p_cyan_not_v1
[1] 0.8
> p_cyan_not_v2
[1] 0.8
我阅读了其他SO文章,指出读取32位操作系统注册表和64位操作系统注册表之间的区别,并在此处找到代码: