16

我有一个编译为 AnyCPU 的 Windows 服务。我正在尝试将其放入我们的安装程序中进行分发。但是...我不清楚 InstallUtil 的 32 位和 64 位版本之间的区别。有谁知道有什么(如果有的话)?

在我的 64 位机器上,我可以运行 $(WinDir)\Microsoft.NET\Framework64\v2.0.50727 或 $(WinDir)\Microsoft.NET\Framework\v2.0.50727。

在这两种情况下,任务管理器中生成的服务进程都没有应用 *32 标志。

只有 32 位 InstallUtil 可以在 32 位机器上运行(显然)。

是否需要使用 \Framework64\ 版本的 InstallUtil?它有什么不同?

4

3 回答 3

16

根据this,您应该使用64位版本来安装64位和MSIL程序集,但没有说明原因。

从 .NET Framework 2.0 版开始,32 位版本的公共语言运行时 (CLR) 仅附带 32 位版本的安装程序工具,但 64 位版本的 CLR 附带 32 位版本和 64 位版本的安装程序工具。使用 64 位 CLR 时,使用 32 位安装程序工具安装 32 位程序集,使用 64 位安装程序工具安装 64 位和 Microsoft 中间语言 (MSIL) 程序集。两个版本的安装程序工具的行为相同。

我相信这里解释了原因。如果您查看帖子的底部,它会解释两者之间的一些差异以及何时使用 32 位 intallutil。

Installutil.exe 是为特定平台构建的,因此它将作为 32 位或 64 位进程启动,并且将更新相关的注册表配置单元。请注意,如果您有一个内置平台开关的管理单元,您将只能在其中一个配置单元(32 位或 64 位)中注册它。

于 2009-10-30T16:46:30.577 回答
2

我也遇到过这个。问题是我的 VS2008 项目设置为平台目标:任何 CPU。无论我在 64 位操作系统上运行哪个 InstallUtil.exe(32 或 64),它都安装为 64 位。

我将项目设置 Target 更改为 x86,然后运行 ​​32 位 installutil.exe,一切正常。它现在在任务管理器中显示 *32 标志。

于 2011-05-11T17:31:13.700 回答
1

如果您正在安装仅 64 位的程序集,则 32 位 InstallUtil 将无法加载它。您需要使用 64 位版本。

于 2015-05-11T18:19:50.677 回答