确定是否安装了ReportViewer的最佳方法

时间:2013-01-23 06:20:42

标签: c#

查看是否在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,但我认为你需要另一个公钥来知道是否安装了报表查看器,但我不知道如何获取公钥。

我能想到的只是检查计算机上是否存在安装目录,这是否可以接受检查?

4 个答案:

答案 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;
}