确定 reportviewerWindowsInstaller-KB893803-v2-x86
是否安装在 PC 上的最佳方法是什么?有没有办法找出用于确定 PC 上是否安装了特定程序的公钥?(试过这个,没有用)
确定是否安装了 .NET 3.5 的最佳方法 这是如何检查是否安装了 .NET 3.5,但我认为您需要另一个公钥才能知道是否安装了报告查看器,但我不知道如何获取公钥。
我能想到的就是检查计算机上是否存在安装目录,这是一种可以接受的检查方式吗?
确定 reportviewerWindowsInstaller-KB893803-v2-x86
是否安装在 PC 上的最佳方法是什么?有没有办法找出用于确定 PC 上是否安装了特定程序的公钥?(试过这个,没有用)
确定是否安装了 .NET 3.5 的最佳方法 这是如何检查是否安装了 .NET 3.5,但我认为您需要另一个公钥才能知道是否安装了报告查看器,但我不知道如何获取公钥。
我能想到的就是检查计算机上是否存在安装目录,这是一种可以接受的检查方式吗?
你可以在Registry
public bool IsInstalled()
{
RegistryKey registryBase = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, string.Empty);
if (registryBase != null)
{
return registryBase.OpenSubKey("Software\\Microsoft\\ReportViewer\\v2.0.50727") != null;
}
return false;
}
在我的机器(Win7 和 Server 2012)中,注册表项不同。
bool exist = false;
RegistryKey registryBase = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, string.Empty);
if (registryBase != null)
{
exist = registryBase.OpenSubKey("Software\\Wow6432Node\\Microsoft\\.NETFramework\\v2.0.50727\\AssemblyFoldersEx\\ReportViewer v10") != null;
}
您还可以向 GAC 查询程序集,如此SO问题中所示。
我在 MS Report Viewer 版本 10 安装上做了一个 Regshot 差异来找到密钥,因为这里发布的其他人都没有工作。
这是新的 Windows 服务器 VM 上的实际差异结果。
无论如何,我为这个版本找到的关键是:
SOFTWARE\Wow6432Node\Microsoft\ReportViewer\v10.0
我使用的代码:
public bool IsInstalledReportViewer()
{
try
{
RegistryKey registryBase = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, string.Empty);
if (registryBase != null)
{
// check the two possible reportviewer v10 registry keys
return registryBase.OpenSubKey(@"Software\Microsoft\ReportViewer\v2.0.50727") != null
|| registryBase.OpenSubKey(@"Software\Wow6432Node\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\ReportViewer v10") != null
|| registryBase.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\ReportViewer\v10.0") != null;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
// put proper exception handling here
}
return false;
}