2009-02-27 78 views
9

我最近问if you can detect from the application if .NET is installed(这样应用程序不会因一般的异常错误而崩溃)。如何在未安装.NET的情况下优雅地失败?

答案似乎是一个普通的“不”。如果.NET没有安装,我仍然希望能够优雅地退出,有没有办法做到这一点?

请记住,我不想更改可执行文件的名称,这意味着可以使用非托管可执行文件执行检查并确定具有真正的.NET程序但不必执行可执行文件。

编辑:我不是说从安装程序失败,根本没有安装程序,只是可执行文件。当然,这种情况发生的可能性很小,但我仍然希望能够检查它。

+4

为什么不使用安装程序?然后这个问题就消失了。 – 2009-02-27 11:22:57

回答

3

你有两种不同的选择:

  • 写一个小的本地代码加载器来检查运行时,如果已安装运行时执行软件。否则,它可能只是给用户一个错误信息,指出他为运行时的下载位置等

OR

  • 请确保您的安装程序安装运行。 Joe Coehorn提到用微星在this post很容易做到,你也应该可以用其他安装程序如InnoSetup来做到这一点。当然如果有人首先安装你的软件,然后重新安装Windows,然后尝试运行你的应用程序而不重新安装它,它会崩溃。

当然,您可以将两者结合起来,为两全其美。

-2

只是提供一个不错的消息框,它没有安装并提供下载它。无论如何,大多数安装者会允许你这样做。

+0

是的,但我该如何做到这一点,没有.NET框架呢? – 2009-02-27 11:00:07

+1

如果您使用VS200 *创建安装程序,它将为您完成。 – 2009-02-27 11:21:51

0

你可以编写一个原生应用程序来检查.net存在。然后你将需要使用LoadLibrary加载托管的dll,并调用一个函数(GetProcAddress)来启动你的.Net应用程序。

我想你还需要搞砸.net dll,以使你的主要功能可以从非托管代码看到和调用。它被称为逆PInvoke。

http://www.autohotkey.com/forum/topic20273.html

0

你能做的就是在写本机Win32 C/C++。NET的检测代码是什么,它的检测,落下的优雅显示您的意思是一些用户友好的错误消息或任何或调用.NET如果有适当的框架可用。如果你不想有两个可执行文件,只需将dll的字节存储在你的本机可执行文件中并动态加载。

请注意,这种方法使您无法使用Mono运行应用程序。

相关问题