You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:64位MSI包为何在64位系统上以32位进程执行

问题排查与解决:x64 MSI以32位进程运行

核心问题确认

你制作的x64 MSI包(摘要Platform设为x64;1033,架构版本400)在64位系统上通过c:\Windows\System32下的64位msiexec执行时,实际以32位进程上下文运行,自定义JScript读取HKLM\SOFTWARE\Bits返回32位注册表节点的值,验证了WOW64映射生效。

关键排查与修复步骤

1. 补全Property表的Platform属性设置

64位MSI必须在Property表中显式标记架构:

  • 打开Orca加载目标MSI
  • 切换到Property表,检查是否存在Platform项
  • 若不存在,右键添加行:Property列填Platform,Value列填x64

2. 修正Template Summary字段

摘要信息的Template字段需完整标记64位属性:

  • 在Orca中点击View -> Summary Information
  • 将Template字段设置为Intel;1033;x64(对应语言ID1033、x64架构)
  • 注:架构版本400对应Windows Installer 4.0,Win7及以上系统默认支持该版本的64位包

3. 标记组件为64位

若MSI包含自定义组件,需确保组件属性标记为64位:

  • 切换到Component表,检查Attributes列的值:64位组件需添加0x00000200(msidbComponentAttributes64bit)属性
  • 未标记的组件会强制安装程序以32位上下文运行

4. 验证MSI实际架构

用PowerShell命令确认MSI的架构属性:

$msiPath = "C:\path\to\b.msi"
$installer = New-Object -ComObject WindowsInstaller.Installer
$database = $installer.OpenDatabase($msiPath, 0)
$view = $database.OpenView("SELECT Value FROM Property WHERE Property='Platform'")
$view.Execute()
$record = $view.Fetch()
Write-Host "MSI Platform Property: $($record.StringData(1))"

补充说明

  • 设置Platform为Intel64(Itanium)报错,说明摘要字段并非完全无效,只是x64标记未被正确识别为64位包标识
  • 架构版本≥500时选AMD64仍无效,核心原因是Property表未同步设置Platform=x64

内容的提问来源于stack exchange,提问作者Seva Alekseyev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:25:17