Windows中安装程序的原理是什么?

时间:2010-09-26 03:56:12

标签: windows-installer release-management portable-executable

IMO PE可执行文件无法在所有平台上运行。

我猜测安装程序会为各种CPU架构打包可执行文件,并在检测到一些工作后选择正确的./ / p>

但是,像MS这样的大公司如何发布他们的产品呢?

3 个答案:

答案 0 :(得分:1)

Microsoft仅发布两个桌面CPU,x86和x86-64。它们通常为每个使用单独的可执行文件。例如,vcredist_x86.exe(x86)和vcredist_x64.exe(x86-64)。

但是,在某些情况下,它们会使用组合安装程序,例如dotNetFx40_Full_x86_x64.exe

答案 1 :(得分:0)

这里似乎有两种思想流派:

  • 为每个平台发布单独的安装程序。

这是最简单的方法,因为您无需在安装程序中执行任何特殊操作。许多Microsoft的实用程序(特别是所有调试工具)都有单独的x86 / amd64 / ia64软件包;不过,我不确定他们的零售产品。

  • 将32位和64位安装程序合并为一个。

这里有一个单片32位安装程序,可以在所有当前支持的Windows平台上运行;安装程序包含每个平台的二进制文件。在安装程序中,根据您运行的平台放置相应的二进制文件。我建议不要这样做,因为它需要很多“魔法”(自定义代码,黑客等),它也会使你的安装程序膨胀。

我们目前使用第二种方法分发我们的产品,但事实证明它非常令人头疼,所以我们将来会改用第一种方法。第一种方法的唯一缺点是您需要客户使用正确的安装程序,尽管您可以将其包装在一个简单的32位shell中,以启动相应的安装程序。

答案 2 :(得分:0)

这实际上是一个相当复杂的讨论,涉及组件及其依赖关系的位数,并且没有任何1个大小适合部署方法。有些产品是本机/非托管(非.NET),为x86编译并在x86和x64上作为x86软件包分发。有些将是纯粹管理(.NET)的应用程序,打包为x86但实际上将尽可能以x64运行。有些将是具有非托管依赖关系的托管应用程序,可能需要采用混合方法,例如在32位计算机上安装x86 DLL到WinSXS,在64位计算机上安装x64 DLL到WinSXS。其他人没有直接的依赖关系,但可能需要注册为其他应用程序(如Office或Internet Explorer)的插件/插件/扩展。

一些软件包作为不同的安装程序分发,一些软件包采用混合方法,一些软件包将拆分为通过引导程序包装的多个软件包。有些人会尝试通过后台网络下载来隐藏膨胀,有些人会先提供给你,以便进行离线安装。

答案很重要:它取决于。