我的任务是扩展现有的WinForm应用程序以检查天气是否安装了所需的.NET Framework(fx.3.5)。
问题是 - 如果没有安装.NET Framework,winform程序根本无法运行......我认为。
我可以(也许)像这里建议的那样:(并制作一个应首先启动的c ++程序,进行检查,然后启动应用程序) Check on .Net framework version from WinForms app 但我宁愿不进入c ++。
另一种方式似乎是这个解决方案: Why isn't an exception thrown when the right .NET framework version is not present? ...在app.config中配置应用程序的位置。但我怀疑如果没有安装.NET框架,它会起作用。
<startup>
<supportedRuntime version="v3.5" />
</startup>
所以我的问题是这个领域的最佳实践?我应该以某种方式进行检查,还是应该将其作为先决条件,即fx。是否需要.NET Framework 3.5版?
答案 0 :(得分:2)
如果未安装所需的框架,您的应用程序将无法运行,因此检查框架是否已从您的应用程序中安装,检查您已知道的内容是真实的。
如果你想检查框架是否已安装,你真的需要在一个你知道会存在的.NET版本中编写的bootstrapper exe中执行此操作(如.NET 2,因为它安装在机器上,并且OS)或其他一些语言,如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();
答案 1 :(得分:0)
如果您经常为有限的用户群部署,则应查看ClickOnce(http://msdn.microsoft.com/en-us/library/t71a733d(v=vs.80).ASPX)
它有点像Windows Installer,但简化了很多。从用户角度看,应用程序看起来像桌面图标。当您单击该图标时,它将自动检查所有要求并安装最新版本的软件(如果已更新)。这样,您可以确保用户始终安装了所需的框架,并且用户始终将使用最新版本。
答案 2 :(得分:0)
要检查.net框架版本,请关注http://support.microsoft.com/kb/318785
答案 3 :(得分:0)
我的任务是扩展现有的WinForm应用程序以检查天气是否已安装所需的.NET Framework(fx.3.5)
这没有任何意义,因为如果缺少必需的组件,它将无法运行。
如前所述,通常安装程序负责检查组件,中断安装,下载和安装组件。
但无论如何,没有什么可以阻止你制作 bootstrapper ,它可以在大多数时间运行(也就是说需要更少/无组件)并运行你的.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);
看起来不复杂吗?然后继续!
答案 4 :(得分:0)
如果未安装所需的.NET版本,那么您运行的程序是正确的。正如其他人所说,你可以使用一个引导程序。您可以简单地让应用程序在运行时失败,并显示默认消息框,该消息框会显示缺少的依赖项。
另一种有效的方法是自己托管CLR。这里:
它也大多像是一个引导程序,但它不是启动第二个(依赖于.NET的)应用程序,而是将它加载到同一个进程中(如果可用)。
答案 5 :(得分:0)
您可以创建批处理(.bat)文件以验证是否存在.NET Framework文件夹:
IF EXIST C:\ WINDOWS \ Microsoft.NET \ Framework [此处为框架版](goto launchprogram)否则转到errormessage