3

确定 reportviewerWindowsInstaller-KB893803-v2-x86是否安装在 PC 上的最佳方法是什么?有没有办法找出用于确定 PC 上是否安装了特定程序的公钥?(试过这个,没有用)

确定是否安装了 .NET 3.5 的最佳方法 这是如何检查是否安装了 .NET 3.5,但我认为您需要另一个公钥才能知道是否安装了报告查看器,但我不知道如何获取公钥。

我能想到的就是检查计算机上是否存在安装目录,这是一种可以接受的检查方式吗?

4

4 回答 4

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;
    }
于 2013-01-23T08:13:36.800 回答
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;
}
于 2013-10-18T00:52:05.650 回答
1

您还可以向 GAC 查询程序集,如此SO问题中所示。

于 2013-01-24T08:22:23.493 回答
0

我在 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;
}
于 2015-05-20T15:54:53.970 回答