返回

在 Wix 4 中如何以 64 位进程运行自定义操作?

windows

在 Wix 4 中以 64 位进程运行自定义操作

简介

在使用 Wix 4 工具集开发 Windows 安装程序时,自定义操作可能是扩展安装程序功能的关键。但是,当以 64 位模式运行时,自定义操作有时会出现问题,因为它可能无法访问 64 位进程所需的文件或资源。本文将探讨导致此问题的常见原因,并提供解决方案以确保自定义操作在 64 位进程中顺利运行。

问题的原因

当自定义操作 DLL 项目构建为 AnyCPU 时,会出现此问题。这种配置允许 DLL 在 32 位和 64 位进程中运行。但是,当尝试仅针对 64 位进行构建时,DLL 可能根本无法加载。

解决方案

解决此问题的关键在于使用以下代码,明确指定以 64 位模式运行自定义操作:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

此代码确保自定义操作始终在 64 位进程中运行,从而解决访问 Program Files 文件夹的问题。

对于 Wix 4 项目,还可以通过以下方式在 XML 中设置 TargetType 来指定目标类型:

<CustomAction Id="MyCustomAction" BinaryKey="MyCustomActionDll" DllEntry="MyCustomAction" Impersonate="yes" TargetType="x64" Execute="immediate" Return="check" />

步骤

  1. 打开 Wix 项目 XML 文件。
  2. 找到自定义操作的 元素。
  3. 添加 TargetType="x64" 属性,如下所示:
<CustomAction Id="MyCustomAction" BinaryKey="MyCustomActionDll" DllEntry="MyCustomAction" Impersonate="yes" TargetType="x64" Execute="immediate" Return="check" />

验证

在进行更改后,重新编译 Wix 项目以生成新的安装程序包。安装程序现在应该能够在 64 位进程中正确执行自定义操作。

提示

  • 确保自定义操作 DLL 已正确注册。
  • 确保 Wix 项目已正确配置为在 64 位模式下运行。
  • 在进行任何更改之前,请务必测试自定义操作。

常见问题解答

1. 如何判断自定义操作是否正在 64 位模式下运行?

可以通过检查进程 ID 来判断自定义操作是否正在 64 位模式下运行。在 64 位进程中,进程 ID 将大于 40 亿。

2. 为什么我的自定义操作无法加载 DLL?

如果自定义操作 DLL 不是为 64 位模式编译的,则可能会出现此问题。确保 DLL 已正确编译为 64 位。

3. 为什么 TargetType 属性不起作用?

如果 Wix 项目没有正确配置为在 64 位模式下运行,则 TargetType 属性可能不起作用。请确保已启用 64 位支持。

4. 有没有其他方法可以在 64 位进程中运行自定义操作?

另一种方法是创建单独的 64 位 DLL 并将其作为自定义操作 DLL 的替代品。此方法需要更多的开发工作,但可以提供更大的控制。

5. 在解决此问题时还有什么其他注意事项?

请注意,更改自定义操作的 TargetType 可能也会影响其依赖关系。确保检查并更新所有受影响的依赖关系。