用程序检查.NET Framework的版本-我应该这样做吗

本文关键字:我应该 这样做 版本 程序 检查 NET Framework | 更新日期: 2023-09-27 17:59:45

我的任务是扩展现有的WinForm应用程序,以检查是否安装了所需的.NET Framework(fx.3.5)。

问题是,如果没有安装.NET Framework,winform程序根本无法运行。。。我想。

我可以(也许)按照这里的建议做:(并制作一个应该首先启动的c++程序,进行检查,然后启动应用程序)从WinForms应用程序检查.Net框架版本但我宁愿不谈c++。

另一种方式似乎是这种解决方案:为什么不是';当不存在正确的.NET框架版本时,是否引发异常?…在app.config中配置应用程序的位置。但如果没有安装.NET框架,我怀疑这是否可行。

<startup>
    <supportedRuntime version="v3.5" />
</startup>

所以我的问题是这方面的最佳实践是什么?我应该以这样或那样的方式进行检查,还是应该将其作为先决条件,即fx。需要.NET Framework 3.5版吗?

用程序检查.NET Framework的版本-我应该这样做吗

如果没有安装所需的框架,您的应用程序将不会运行,因此检查框架是否在应用程序中安装就是检查您已经知道是真的。

如果你想检查框架是否已安装,你真的需要在引导程序exe中完成这项工作,引导程序exe要么是用你知道会存在的.NET版本编写的(比如.NET 2,因为它安装在带有操作系统的机器上),要么是用C++等其他语言编写的。

您可以在注册表(HKLM''SOFTWARE''Microsoft''NET Framework Setup''NDP)中查看安装了哪些框架。这可以用C#或任何其他语言轻松完成。

C#代码如下:

var baseKeyName = @"SOFTWARE'Microsoft'NET Framework Setup'NDP";
var installedFrameworkVersions = Registry.LocalMachine.OpenSubKey(baseKeyName);
var versionNames = installedFrameworkVersions.GetSubKeyNames();

如果您经常为有限的用户集进行部署,那么您应该查看ClickOnce(http://msdn.microsoft.com/en-us/library/t71a733d(v=vs.80).ASPX)

它有点像Windows安装程序,但简化了很多。从用户的角度来看,应用程序将看起来像桌面图标。当您单击该图标时,它将自动检查所有要求,并在更新后安装最新版本的软件。通过这种方式,您可以确保用户始终安装所需的框架,并且用户始终使用最新版本。

要检查.net框架工作版本,请执行以下操作http://support.microsoft.com/kb/318785

我的任务是扩展现有的WinForm应用程序,以检查是否安装了所需的.NET Framework(fx.3.5)

这没有意义,因为如果缺少必需的组件,它将不会运行。

如前所述,安装程序通常负责检查组件、中断安装、下载和安装组件。

但在任何情况下,都不会阻止您制作引导程序,它将能够在大多数情况下运行(也就是所需的较少/无组件),并将运行您的.net应用程序。它可以通过多种方式组织:exe+exe(经常重命名)、exe+dll、exe+嵌入式资源(提取并运行)等

如果你想使用MS Visual C++来制作引导程序,那么这里有一个不好的新方法:它需要安装组件(是的,这很愚蠢,但它需要Microsoft Visual C++200x可重新分发)。因此,这将再次成为安装程序的工作,否则您将不得不学习如何编写C/C++纯WinAPI软件,这很痛苦,但可行。

例如,这是对.Net Framework 4.0 的检查

// check if net framework 4.0 or higher is installed
HKEY hkey;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE''Microsoft''Net Framework Setup''NDP''v4", 0, KEY_READ, &hkey) != ERROR_SUCCESS)
    ; // some error
RegCloseKey(hkey);

看起来不复杂吗?那就去吧!

如果没有安装所需的.NET版本,那么程序没有运行是正确的。正如其他人所说,你可以使用引导器。您可以简单地让应用程序在运行时失败,并显示默认的消息框,抱怨缺少依赖项。

另一种有效的方法是自己托管CLR。此处:

  • 托管公共语言运行库
  • CLR宿主-自定义CLR

它也很像引导程序,但它没有启动第二个(依赖.NET的)应用程序,而是将其加载到同一进程中(如果可用)。

您可以创建一个批处理(.bat)文件来验证.NET Framework文件夹的存在:

如果存在C:''WINDOWS''Microsoft.NET''Framework[此处为框架版本](转到启动程序),则转到错误消息

相关文章: