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

为何VBA中无法找到System32目录下的exe文件?以WFS.exe为例

解决VBA调用Windows Fax and Scan提示文件未找到的问题

问题原因

这是64位Windows系统的文件系统重定向机制导致的:

  • 若你使用的是32位版本的Excel,VBA运行在32位进程中,当代码访问C:\Windows\System32时,系统会自动将路径重定向到C:\Windows\SysWOW64(存放32位系统文件的目录)。
  • 而WFS.exe是64位程序,仅存在于真正的System32目录下,因此会出现"文件未找到"的错误。

解决方案

方案1:使用Sysnative虚拟路径

直接修改代码中的路径,用Sysnative替代System32,这个虚拟路径专门用于让32位程序访问64位的System32目录,不会触发重定向:

Dim RetVal
RetVal = Shell("C:\Windows\Sysnative\WFS.exe", 1)

方案2:临时关闭文件系统重定向(适合批量调用场景)

通过Windows API临时关闭重定向,完成调用后恢复,确保后续操作不受影响:

' 声明64位兼容的API函数
Declare PtrSafe Function Wow64DisableWow64FsRedirection Lib "kernel32" (ByRef OldValue As LongPtr) As Boolean
Declare PtrSafe Function Wow64RevertWow64FsRedirection Lib "kernel32" (ByVal OldValue As LongPtr) As Boolean

Sub RunWindowsFaxAndScan()
    Dim OldRedirectionState As LongPtr
    Dim ShellResult As Variant
    
    ' 关闭重定向
    If Wow64DisableWow64FsRedirection(OldRedirectionState) Then
        ' 调用目标程序
        ShellResult = Shell("C:\Windows\System32\WFS.exe", 1)
        ' 恢复重定向
        Call Wow64RevertWow64FsRedirection(OldRedirectionState)
    End If
End Sub

注意:如果你的Excel是64位版本,无需任何修改,原代码即可正常运行,因为64位进程不会触发文件系统重定向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:10:35