IMO PE 可执行文件不能在所有平台上运行。
我猜安装程序会为各种 CPU 架构打包可执行文件,并在进行一些检测工作后选择正确的一个。
但这就是像 MS 这样的大公司发布产品的方式吗?
IMO PE 可执行文件不能在所有平台上运行。
我猜安装程序会为各种 CPU 架构打包可执行文件,并在进行一些检测工作后选择正确的一个。
但这就是像 MS 这样的大公司发布产品的方式吗?
Microsoft 仅发布两个桌面 CPU,x86 和 x86-64。他们通常为每个使用单独的可执行文件。例如,vcredist_x86.exe (x86) 和vcredist_x64.exe (x86-64)。
但是,在某些情况下,它们确实使用组合安装程序,例如dotNetFx40_Full_x86_x64.exe。
这里似乎有两种思想流派:
这是最直接的方法,因为您不必在安装程序中做任何特别的事情。Microsoft 的许多实用程序(尤其是所有调试工具)都包含在单独的 x86/amd64/ia64 包中;不过,我不确定他们的零售产品。
这里有一个单一的 32 位安装程序,可以在所有当前支持的 Windows 平台上运行;安装程序包含每个平台的二进制文件。在安装程序中,根据您运行的平台放置适当的二进制文件。我建议不要这样做,因为它需要很多“魔法”(自定义代码、黑客等),而且它还会使您的安装程序膨胀。
我们目前使用第二种方法分发我们的产品,但事实证明它非常令人头疼,因此我们将在未来改用第一种方法。第一种方法的唯一缺点是您需要客户使用正确的安装程序,尽管您可以将其包装在一个简单的 32 位 shell 中以启动相应的安装程序。
这实际上是一个相当复杂的讨论,涉及组件的位数及其依赖关系,并且没有任何一种尺寸适合所有部署方法。有些产品是本机/非托管(不是 .NET),针对 x86 编译并在 x86 和 x64 上作为 x86 包分发。有些将是完全托管的 (.NET) 应用程序,它们被打包为 x86,但实际上如果可能的话,它们将作为 x64 运行。有些将是托管应用程序,它们具有非托管依赖项,并且可能需要执行混合方法,例如将 x86 DLL 安装到 32 位计算机上的 WinSXS 以及将 x64 DLL 安装到 64 位计算机上的 WinSXS。其他人没有直接的依赖关系,但可能需要注册为其他应用程序(如 Office 或 Internet Explorer)的插件/插件/扩展。
有些软件包作为不同的安装程序分发,有些采用混合方法,有些将拆分为通过引导程序包装的多个软件包。有些人会尝试通过后台 Web 下载来隐藏臃肿,有些人会预先将其全部提供给您以允许离线安装。
答案是:视情况而定。