查看是否在PC上安装了reportviewer和WindowsInstaller-KB893803-v2-x86
的最佳方法是什么?有没有办法找出用于查明PC上是否安装了特定程序的公钥? (Tried this, didn't work)
Best Way To Determine If .NET 3.5 Is Installed 这是如何检查是否安装了.NET 3.5,但我认为你需要另一个公钥来知道是否安装了报表查看器,但我不知道如何获取公钥。
我能想到的只是检查计算机上是否存在安装目录,这是否可以接受检查?
答案 0 :(得分:3)
您可以查看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;
}
答案 1 :(得分:2)
在我的计算机(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;
}
答案 2 :(得分:1)
您还可以向GAC查询程序集,如此SO问题所示。
答案 3 :(得分:0)
我在MS Report Viewer版本10安装上做了一个Regshot diff来找到密钥,因为这里发布的其他人都没有工作。
在新的Windows服务器VM上Here is the actual diff results。
无论如何,我发现这个版本的关键是:
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;
}