在.NET中,如何检测用户是否安装了特定的可再发行组件?

时间:2009-06-16 13:56:14

标签: vb.net dll crystal-reports

我创建了一个构建Crystal报表并在报表查看器中显示它的类。

但是,如果没有Crystal Redistributable,代码会崩溃。如何以编程方式检测最终用户是否安装了Crystal DLL?

我需要包含的代码是:

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

5 个答案:

答案 0 :(得分:1)

理想情况下,您将在安装时处理应用程序的所有依赖项,并确保已安装所有必需的组件。但是,您可以在try..catch块中包装调用DLL的代码,并在抛出时捕获DllNotFoundException。

答案 1 :(得分:1)

我想Crystal会安装到GAC。 因此,您需要以编程方式浏览全局程序集缓存并在那里查找Crystal程序集

GAC可以通过Windows API以编程方式进行管理。 Here you will find一个简单的包装器,允许从托管代码管理GAC

但我不建议你这样做。 :)

在安装软件期间,通常也要检查所有必需的程序集,我认为Windows Installer具有检查程序集的功能

然而,并非总是如此。 假设您希望用户在没有Crystal的情况下运行程序,但如果未安装Crystal,则不允许显示报告。

在这种情况下,您应该将所有报表功能与其他表单分离。您应该使用Crystal Reports功能创建一个单独的项目,我们称之为MyReports。只有那个项目应该引用Crystal程序集,而其他项不应该引用。其他项目也不应该直接引用MyReports。

最后,您应该使用反射来调用从其他项目在MyReports中实现的报表查看器。

通常,您将在将使用反射从文件加载MyReports程序集的过程中编写try / catch。因此,如果Crystal或其他东西不存在,它将抛出异常,您将显示给用户,但程序的其他部分将起作用。

此外,您可以阅读依赖注入设计模式,它有助于管理此类问题。

答案 2 :(得分:1)

您可以检查以下注册表项是否存在

HKEY_CURRENT_USER\Software\Crystal Decisions

这将告诉您是否安装了水晶报告。如果要检查特定版本,请检查子键。例如,随Visual Studio 2008安装的水晶报告是10.2

答案 3 :(得分:0)

您可以通过查看注册表找到这些详细信息。我会搜索并提供更新。

编辑:您还可以将Crystal报表作为部署包中的先决条件。然后,您可以确保最终用户拥有该库。

答案 4 :(得分:0)

在您的设置中使用merge module。 Sap有一个清单:

Merge modules