繁体   English   中英

以编程方式检查.NET Framework版本-我应该吗?

[英]Programatically check for version .NET Framework - Should I?

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

很好的问题是-如果未安装.NET Framework,则winform程序根本无法运行...我想。

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

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

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

所以我的问题是这方面的最佳实践什么 我应该以一种或另一种方式进行检查,还是仅作为前提条件,即fx。 需要.NET Framework 3.5版吗?

如果未安装所需的框架,则您的应用程序将无法运行,因此检查是否已从应用程序内部安装框架正在检查您已经知道是正确的事情。

如果要检查是否已安装框架,则确实需要从已知会存在的.NET版本(例如.NET 2,因为它随操作系统一起安装在计算机上)中编写的bootstrap exe文件中执行此操作,或者其他一些语言,例如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/zh-cn/library/t71a733d ( v=vs.80 ) .ASPX

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

要检查.net框架工作版本,请遵循http://support.microsoft.com/kb/318785

我的任务是扩展现有的WinForm应用程序以进行检查天气,或者未安装所需的.NET Framework(fx。3.5)

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

如前所述,通常安装程序负责检查组件,中断安装,下载并安装它们的工作。

但是无论如何,没有什么可以阻止您制作bootstrapper的 ,它可以在大多数情况下运行(aka所需的组件更少/无),并且可以运行.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。 这里:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM