如何在一个可执行文件中打包安装(框架+应用程序)?

我想创建一个文件’setup.exe’,其中包含我在C#中开发的一个应用程序,以及.Net framework 4.0的设置。

我的想法是:当我执行’setup.exe’时,会检查计算机上是否安装了.net framework 4.0,如果不安装它!

使用InstallShield 2009。

谁知道怎么做?

如果不明白,请告诉我。

谢谢。

关于设置,您可以使用Visual Studio附带的内置机制,例如,它们允许setup.exe自动检查是否安装了所需的框架版本,如果不存在则安装它 – 为了一个好的开始,请参阅MSDN 。

关于使您的应用程序/ EXE包含1个文件(包括所有托管依赖项),您有以下几种选择:

  • 使用ILMerge (免费)
    如何看到这里和这里

要么

  • 使用一些工具,如SmartAssembly (商业)
    它可以嵌入和合并其他东西(无需更改源代码)

要么

  • 自己少于10行的代码(免费但源代码变化最小)
    将所有需要的依赖项标记为“嵌入式资源” – 这样它们就包含在EXE文件中……您需要设置一个AssemblyResolve处理程序,它在运行时从Resources读取并将所需的DLL返回给.NET运行时…

有许多用于创建设置的框架。
我最喜欢的是WIX,你可以从这里下载: http : //wix.sourceforge.net/
还有一个使用C#创建WIX接口的框架,名为sharpsetup,您可以从这里下载它: http ://sharpsetup.eu/但我不确定它是否适合您的需求,因为目标机器可能没有.NET首先(尽管可能在.NET 2.0中编写设置,但我不确定)。

学习WIX可能需要一些时间,但是一旦你过了这个,做你想做的事情应该不会太难。

是否可以在自动提取器中打包完整(拆分)设置? 您可以使用WinRar或类似方法使用“autorun”构建压缩的exe。

据我所知,标准的InstallShield 2009是不可能的。 您必须至少拥有InstallShield 2010(使用适用于Visual Studio 2010的Installshield 2010扩展包)。

我不知道是否有办法“破解”它……

我解决了这个问题,创建了一个自定义操作,这个是“Open executable”类型,我在向导的按钮事件中调用了这个自定义操作。