如何安全地检查使用可能不存在的.NET Framework版本的.NET Framework版本?

3
我有一个使用.NET 3.5构建的应用程序。如果用户在没有安装.NET 3.5的情况下运行它,我希望能够控制他们看到的内容,并可能提供一条消息,让他们能够理解(带有链接到.NET 3.5),而不是未处理的异常堆栈跟踪。但是,如果他们实际上没有.NET 3.5,我的应用程序如何控制任何东西?
4个回答

4
你是否假定至少安装了.NET的某个版本?
你可以编写一个小的加载器,以兼容所有版本进行检查。
或者如果未安装.NET,则可以找到一个简单的批处理程序(尽管如果您喜欢,也可以轻松地使用C++完成此操作)。
@ECHO OFF
SET FileName=%windir%\Microsoft.NET\Framework\v1.1.4322
IF EXIST %FileName% GOTO Skip
ECHO.You currently do not have the Microsoft® .NET Framework 1.1 installed.
ECHO.This is required by the setup program for MyApplication.
ECHO.
ECHO.The Microsoft® .NET Framework 1.1 will now be installed on you system.
ECHO.After completion setup will continue to install MyApplication on your system.
ECHO.
Pause
SET FileName=
Start /WAIT .\dotnetfx.exe
Start .\Setup.exe
ECHO ON
Exit
Tongue Tiedkip
SET FileName=
Start .\Setup.exe
ECHO ON
Exit

这个链接 也许会有所帮助。


你可以编写一个小的C++应用程序,检查注册表中是否存在.NET,并将其作为加载器。但是我不建议这样做,因为这可能会影响未来的兼容性。有人曾为此编写了一个批处理程序。 - bdd
好的,我需要改进一下我的问题陈述方式。 - CrashCodes

2

你可以考虑使用需要已安装3.5版本的安装程序,这样如果用户无法运行该程序,则可以在第一时间阻止该应用程序到达用户手中。


2
更好的做法是使用安装程序技术,例如Wix或Visual Studio设置项目,在安装过程中检查您软件的所有先决条件,例如特定的.NET框架运行时是否存在。如果不存在,它将安装它们,或者至少告诉用户在哪里获取它们以及下一步该怎么做。

我刚开始使用Wix只是因为我想要一个安装程序,而且项目类型也与SharpDevelop相匹配。我没有意识到这会使这个问题变得无关紧要。 - CrashCodes
哦。我需要在Wix项目中执行什么特殊操作才能检查.NET 3.5吗? - CrashCodes

1
你需要一个非 .NET 的 EXE 文件来检查 .NET 运行时。它可以用任何你知道目标 PC 上存在的东西编写。例如,如果针对 Windows 2000 或更高版本,你知道 Visual Basic 6.0 运行时是存在的,因此你的安装程序可以始终启动一个 Visual Basic 6.0 启动应用程序来检查运行时,然后再启动你的 .NET EXE 文件。更好的方法是编写一个 C++ 应用程序,它不依赖于除 Windows API 之外的任何运行时。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接