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

如何让Wix自定义动作生成64位PowerShell进程?

问题核心

你的问题本质是32位MSI自定义动作进程触发了文件系统重定向:即使指定了C:\Windows\System32下的PowerShell,实际仍会被映射到C:\Windows\SysWow64运行32位版本,进而无法访问64位专属的注册表路径(32位进程中HKLM:\Software会被重定向到HKLM:\Software\Wow6432Node)。

解决步骤

1. 构建64位专属MSI

明确指定Wix项目的64位平台属性:

  • 打开Wix项目属性,将目标平台设置为x64(不要使用Any CPU)。
  • 在Product元素中添加Platform="x64"标识,确保MSI被识别为64位安装包:
<Product Id="*" Name="YourProduct" Language="1033" Version="1.0.0.0" Manufacturer="YourCompany" UpgradeCode="YOUR-GUID-HERE" Platform="x64">

2. 给自定义动作添加Win64标识

你的SystemShell自定义动作缺少Win64="yes"属性,这是让自定义动作以64位进程运行的关键。修改CustomAction定义:

<CustomAction Id="SystemShell" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="deferred" Return="check" Impersonate="no" Win64="yes" />

3. 确认注册表搜索有效性

你已在RegistrySearch中添加Win64="yes",结合64位MSI设置,现在会正确读取64位注册表中的PowerShell路径,不会被重定向到Wow6432Node。

为什么之前的尝试无效?
  • 仅修改RegistrySearch但未构建64位MSI:32位MSI会强制启用文件系统重定向,C:\Windows\System32会被映射到C:\Windows\SysWow64,实际运行的还是32位PowerShell。
  • 未给自定义动作加Win64="yes":即使MSI是64位,自定义动作默认仍以32位进程运行,这就是日志中显示"32bit Elevated Non-remapped custom action server"的原因。
验证方法

安装时生成MSI日志,检查是否出现以下内容,确认自定义动作服务器为64位:

MSI (s) (XX:YY) [HH:MM:SS:mmm]: Hello, I'm your 64bit Elevated Non-remapped custom action server.

此时PowerShell的$([Environment]::Is64BitProcess)会返回true,注册表路径也能正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:42:41