我有一个WPF程序,一个独立的程序,来自“Release”目录的副本。所以它是一个没有安装的绿色软件。
但它需要安装.net 4.0。所以我在发行版USB磁盘上有“dotNetFx40_Full_x86_x64.exe”。
问题是,当我的程序在XP上运行(没有.net 4.0)时,它会说它需要.net 4.0并询问用户是否要上网下载它,即使我在磁盘上有本地副本。 / p>
我的问题是,无论如何让程序在本地安装.net而不上网下载。
答案 0 :(得分:3)
执行此操作的标准方法是创建一个安装和安装程序包,其中包括您的应用程序以及.NET框架。
用户将运行您的安装程序并安装所需的内容。
编辑:
如果您不想使用安装程序,可以使用Ngen。
原生图像生成器(Ngen.exe)是一种改进的工具 托管应用程序的性能。 Ngen.exe创建本机图像, 哪些文件包含已编译的特定于处理器的机器代码, 并将它们安装到本地计算机上的本机映像缓存中。 运行时可以使用来自缓存的本机映像,而不是使用 实时(JIT)编译器来编译原始程序集。
不幸的是,您仍然需要.net框架中的库才能运行您的程序。我所知道的Microsoft .Net框架SDK没有任何功能允许您将所有必需的文件编译成单个可执行文件
编辑2:
经过一番搜索后,this也值得一试。它在这里被称为Spoon Studio,它是features。看起来这就是你要找的东西。
执行基于.NET,Java和AIR的应用程序,没有单独的 安装步骤或运行时版本控制冲突。勺子虚拟 机器支持所有版本的.NET Framework和Java, 包括.NET 4.0,4.2和4.5。
在内联网上的独立EXE中提供虚拟化应用程序 Spoon Server,或使用Spoon.net上网。
独立可执行生成包所有虚拟机和 应用程序有效内容作为可以部署的单个EXE文件 使用任何标准文件传递机制或现有桌面 管理基础设施。
答案 1 :(得分:2)
如果您不想使用安装程序,则需要制作一个启动程序,而不是从一开始就运行您的应用程序。
如果您可以在系统上保证.net 2.0,则可以在解决方案中创建2.0 Winforms项目,检查框架版本如this,如果不是4,则启动安装程序同步< / em>,当它完成运行时,再次检查框架版本,最后启动你的应用程序。
您可以启动应用程序而无需在其中安装其他.exe。您可以使用Assembly.Load加载项目(然后您应该将其编译到类库中)并调用应用程序启动函数。
但是,你绝对不能只在一个文件中执行此操作。您需要本机应用程序或.net 2.0应用程序作为启动器。
答案 2 :(得分:1)
我有完全相同的问题。
最终我咬了一下子弹并创建了一个本机C ++引导程序(无需执行.NET),检查是否安装了.NET,如果没有,则安装它。然后,引导程序启动了.NET程序。