我有一个编译为AnyCPU的Windows服务。我正试图将它放入我们的安装程序中进行分发。但是......我不清楚32位和64位版本的InstallUtil之间的区别。有谁知道有什么(如果有的话)?
在我的64位机器上,我可以运行$(WinDir)\ Microsoft.NET \ Framework64 \ v2.0.50727或$(WinDir)\ Microsoft.NET \ Framework \ v2.0.50727。
在这两种情况下,任务管理器中生成的服务进程都没有应用* 32标志。
只有32位的InstallUtil才能在32位计算机上运行(显然)。
是否需要使用\ Framework64 \版本的InstallUtil?它有什么不同的做法?
答案 0 :(得分:15)
根据this,您应该使用64位版本来安装64位和MSIL程序集,但它没有说明原因。
从.NET Framework 2.0版开始,32位版本的 公共语言运行库(CLR)仅附带32位版本 安装程序工具,但CLR的64位版本附带 安装程序工具的32位和64位版本。使用时 64位CLR,使用32位安装程序工具安装32位 程序集和64位安装程序工具安装64位和 Microsoft中间语言(MSIL)程序集。两个版本的 安装程序工具的行为相同。
我相信here解释了原因。如果您查看帖子的底部,它会解释两者之间的差异以及何时使用32位intallutil。
Installutil.exe是为特定平台构建的,因此它会 从32或64位进程开始,相关的注册表配置单元将是 更新。请注意,如果您使用平台构建了管理单元 切换,您只能在其中一个配置单元中注册 (32位或64位)。
答案 1 :(得分:2)
我也遇到了这个问题。问题是我的VS2008项目被设置为Platform Target:Any CPU。无论我在64位操作系统上运行哪个InstallUtil.exe(32或64),它都安装为64位。
我将项目设置Target更改为x86,然后运行32位installutil.exe,一切正常。它现在在任务管理器中显示* 32标志。
答案 2 :(得分:1)
如果您要安装仅64位的程序集,则32位InstallUtil将无法加载它。您需要使用64位版本。