【发布时间】:2018-03-27 22:27:13
【问题描述】:
以下代码完美地用于十几个 Intranet 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。 reg 键的存在如图所示,并且如前所述,此代码是使用这些相同的键从工作 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。
有什么想法吗?
谢谢!
【问题讨论】:
-
请注意,代码是静态类的一部分,正如您所知道的那样。 ;-)
-
在开始时查找错误代码
-
您是否排除了 registry redirector 作为观察到行为的可能原因?
-
有人将该问题标记为我在下面的答案中引用的资源的副本。哈哈。所以。社区的响应速度很快,而且通常很准确!!! ;-)
标签: c# winapi registry console-application