C# 检测是否安装了WIF运行时的最佳方法
我的ASP.Net应用程序的一些页面使用WIF直接连接到另一个服务。WIF只是在这里取得进展,虽然它安装在测试和生产服务器上,但每当一个新的程序员或测试人员获得最新信息,并且碰巧在他们的机器上没有安装WIF运行时,他就会收到一个YSOD和一个关于找不到Microsoft.IdentityModel的错误。。。他们从来没有读过,而是发了一条即时消息告诉我我的应用程序坏了 我想检测是否安装了WIF运行时,并显示每个有用的错误消息,如果没有,则显示下载页面的链接。我不想检查特定的.dll路径,因为这可能会更改。。。3.5和4.0已经有了不同的路径 是否有最好的方法来检测是否安装了WIF运行时 (显然,在一个尚未引用它的页面中…如果没有安装它,将无法正确显示) 编辑 看起来3.5/4.0特定的方法就可以了。它不必是未来的证明C# 检测是否安装了WIF运行时的最佳方法,c#,asp.net,wif,C#,Asp.net,Wif,我的ASP.Net应用程序的一些页面使用WIF直接连接到另一个服务。WIF只是在这里取得进展,虽然它安装在测试和生产服务器上,但每当一个新的程序员或测试人员获得最新信息,并且碰巧在他们的机器上没有安装WIF运行时,他就会收到一个YSOD和一个关于找不到Microsoft.IdentityModel的错误。。。他们从来没有读过,而是发了一条即时消息告诉我我的应用程序坏了 我想检测是否安装了WIF运行时,并显示每个有用的错误消息,如果没有,则显示下载页面的链接。我不想检查特定的.dll路径,因为这可
我会尝试在try/catch-block中从GAC加载Microsoft.IdentityModel.dll,或者更好,只捕获没有WIF运行时的用户当前获取的特定异常,并使用该异常将用户重定向到特定错误页/消息
回答您的确切问题——是否有一种方法来检测是否存在正确的WIF安装包:如果您的应用程序可以访问注册表(至少在只读模式下),也可以检查Windows身份基础相关的条目是否出现在软件\微软\ Windows身份基础中(以及64位系统的相关Wow6432Node)。
在检查了一些来自Microsoft的安装程序以了解他们如何检测到WIF运行时的存在后,我同意上面答案中的注册表检查建议,这就是他们所做的 以下是我的观点:/// <summary>
/// Determines if WIF is installed on the machine.
/// </summary>
public static class WifDetector
{
/// <summary>
/// Gets a value indicating that WIF appears to be installed.
/// </summary>
public static bool WifInstalled { get; private set; }
static WifDetector()
{
WifInstalled = IsWifInstalled();
}
private static bool IsWifInstalled()
{
try
{
//return File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
// "Reference Assemblies\\Microsoft\\Windows Identity Foundation\\v3.5\\Microsoft.IdentityModel.dll"));
//The registry approach seems simpler.
using( var registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows Identity Foundation") ??
Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows Identity Foundation") )
{
return registryKey != null;
}
}
catch
{
//if we don't have permissions or something, this probably isn't a developer machine, hopefully the server admins will figure out the pre-reqs.
return true;
}
}
}
我们没有针对开发人员机器的花哨的web部署包,它只是从源代码获取并运行。这将允许没有此库的开发人员在遇到YSOD和模糊的程序集加载错误时不会浪费时间
感谢您的建议。微软官方评论:
Q: Under what registry key is WIF installed?
A: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsIdentityFoundation\setup\v3.5\.
参考因为只有少数页面需要WIF,所以我希望在应用启动后立即检查,并在到达这些页面之前让他们知道应用缺少所需的组件。我们不进行任何奇特的部署打包,因此没有安装程序来执行此项工作。此注册表检查是其他Microsoft安装程序所做的全部(我剖析了其中的几个)。请参阅下面我的答案,了解我最终得到的代码。
Q: Under what registry key is WIF installed?
A: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsIdentityFoundation\setup\v3.5\.