IT天空

 找回密码
 加入我们

手机号码,快捷登录

搜索

[已解决] AU3关于X64文件重定向不生效的问题

[复制链接]
听雨yu 发表于 2022-7-25 07:53:57 | 显示全部楼层 |阅读模式

本帖最后由 听雨yu 于 2022-7-29 20:21 编辑

这两天肝程序的时候,遇见一个小问题就是我自己的程序需要32位的安装控制程序然后在64位电脑上安装时,程序安装包是可以直达C盘64位的program files目录,但安装控制程序使用目录宏跳转时候却定向到X86的目录去,我开始时候不知道重定向问题,就一直在看教程改代码,直到我后面明白X64文件重定向和win的一个api可以禁用重定向,然后呢,我特意新开了个程序去测试
  1. #include <WinAPIFiles.au3>
  2. _WinAPI_Wow64EnableWow64FsRedirection(True)
  3. Global $OSA = @OSArch
  4. MsgBox(0, "1", $OSA)
  5. $ProFiles = EnvGet("ProgramFiles")
  6. Local $X64 = False
  7. MsgBox(0, $X64, $ProFiles)

  8. $ProFiles2 = @ProgramFilesDir
  9. Local $X64 = True
  10. MsgBox(0, $X64, $ProFiles2)
复制代码
测试程序的代码是这样的,也用了win禁用文件重定向的api,但就很奇怪,测试的弹窗(第三个)依然和第二个一样,第一个是测试检测位数的宏的反馈,完全没起到禁用重定向能访问X64解决重定向问题,函数改True和False都测试过了,没啥用,就很奇怪,最后我自己的安装控制程序只好改成检测系统为64位的时候使用系统盘的宏配合绝对路径变相解决问题,所以说有没大佬帮忙讲解下这个api该怎么用才能让X86的安装控制程序能直接通过宏访问到X64的Program Files目录

【PS:我自己的安装控制程序的策划是检测系统位数再决定是否启用重定向,所以这个api函数是套在主函数里的,我不确定是不是这个原因导致的问题,但我测试程序把它单独提出来放也没用】
烦请S大或者天空里懂这块的人帮忙解答解答,感谢


测试程序的运行截图
QQ截图20220724120923.png
QQ截图20220725075023.png
QQ截图20220725075035.png

最近访问 头像模式 列表模式
y283146775 发表于 2022-7-25 08:28:44 | 显示全部楼层

活跃 24581| 技术 23| 互助 47| 钻石 490

查看了一下帮助文档,_WinAPI_Wow64EnableWow64FsRedirection这个函数是【指定是否启用或禁用 WOW64 系统文件夹重定向】,从帮助上看是用于64位系统运行 32 位应用程序获取本机 Windows/System32 目录用的。

点评

那如果说X64系统运行32位程序怎么获取X64的Program目录呢  详情 回复 发表于 2022-7-25 09:39
 楼主| 听雨yu 发表于 2022-7-25 09:39:12 | 显示全部楼层

活跃 1624| 技术 0| 互助 0| 钻石 180

y283146775 发表于 2022-7-25 08:28
查看了一下帮助文档,_WinAPI_Wow64EnableWow64FsRedirection这个函数是【指定是否启用或禁用 WOW64 系统文 ...

那如果说X64系统运行32位程序怎么获取X64的Program目录呢
y283146775 发表于 2022-7-25 11:43:09 | 显示全部楼层

活跃 24581| 技术 23| 互助 47| 钻石 490

你运行一下这个脚本试试?
  1. Example()

  2. Func Example()
  3.         Local $sEnvVar1 = EnvGet("ProgramFiles")
  4.         MsgBox($MB_SYSTEMMODAL, "", "环境变量 %ProgramFiles% 的值: " & @CRLF & @CRLF & $sEnvVar1)
  5.        
  6.         Local $sEnvVar2 = EnvGet("ProgramFiles(x86)")
  7.         MsgBox($MB_SYSTEMMODAL, "", "环境变量 %ProgramFiles(x86)% 的值:" & @CRLF & @CRLF & $sEnvVar2)
  8.        
  9.         Local $ProFiles2 = @ProgramFilesDir
  10.         MsgBox(0, '返回路径', $ProFiles2)
  11. EndFunc   ;==>Example
复制代码

点评

都是X86的目录  详情 回复 发表于 2022-7-25 13:24
 楼主| 听雨yu 发表于 2022-7-25 13:24:37 | 显示全部楼层

活跃 1624| 技术 0| 互助 0| 钻石 180

y283146775 发表于 2022-7-25 11:43
你运行一下这个脚本试试?

都是X86的目录
yangjianzj 发表于 2022-7-25 14:07:28 | 显示全部楼层

活跃 5665| 技术 4| 互助 19| 钻石 0

本帖最后由 yangjianzj 于 2022-7-25 14:10 编辑

这是因为@ProgramfilesDir在X64下的值一直就是c:\ProgramFiles (x86)如果想在X64下访问c:\ProgramFiles,需要开启重定向后直接使用c:\ProgramFiles\*这种路径就可以访问到了

点评

谢谢解答,我也是用绝对路径解决的  详情 回复 发表于 2022-7-25 14:35
 楼主| 听雨yu 发表于 2022-7-25 14:35:51 | 显示全部楼层

活跃 1624| 技术 0| 互助 0| 钻石 180

yangjianzj 发表于 2022-7-25 14:07
这是因为@ProgramfilesDir在X64下的值一直就是c:\ProgramFiles (x86)如果想在X64下访问c:\ProgramFiles,需 ...

谢谢解答,我也是用绝对路径解决的

点评

绝对路径还是有点不放心的,用这个  详情 回复 发表于 2022-7-25 17:02
y283146775 发表于 2022-7-25 17:02:00 | 显示全部楼层

活跃 24581| 技术 23| 互助 47| 钻石 490

听雨yu 发表于 2022-7-25 14:35
谢谢解答,我也是用绝对路径解决的

绝对路径还是有点不放心的,用这个
  1. @HomeDrive & "\Program Files"
复制代码

点评

@homedrive在OOBE中是空值 所以你这个@HomeDrive & "\Program Files"在OOBE中也是错的!在OOBE中值等于\Program Files  详情 回复 发表于 2022-7-26 01:11
浅暮丶千殇 发表于 2022-7-25 20:05:21 | 显示全部楼层

活跃 3524| 技术 0| 互助 0| 钻石 370

直接调用dll 写函数试试   https://docs.microsoft.com/en-us/windows/win32/api/wow64apiset/nf-wow64apiset-wow64disablewow64fsredirection 看这个链接  参数值 int 类型下面是易语言的函数调用 可参考下
FDT$KA(_D~I82WNH1{]3{@2.png


点评

知道了,谢谢  详情 回复 发表于 2022-7-26 07:53
yangjianzj 发表于 2022-7-26 01:11:46 | 显示全部楼层

活跃 5665| 技术 4| 互助 19| 钻石 0

y283146775 发表于 2022-7-25 17:02
绝对路径还是有点不放心的,用这个

@homedrive在OOBE中是空值
所以你这个@HomeDrive & "\Program Files"在OOBE中也是错的!在OOBE中值等于\Program Files

点评

我主要是用来写软件自动静默安装,和OOBE没啥关系  详情 回复 发表于 2022-7-27 14:11
 楼主| 听雨yu 发表于 2022-7-26 07:53:32 | 显示全部楼层

活跃 1624| 技术 0| 互助 0| 钻石 180

浅暮丶千殇 发表于 2022-7-25 20:05
直接调用dll 写函数试试   https://docs.microsoft.com/en-us/windows/win32/api/wow64apiset/nf-wow64apis ...

知道了,谢谢
 楼主| 听雨yu 发表于 2022-7-27 14:11:55 | 显示全部楼层

活跃 1624| 技术 0| 互助 0| 钻石 180

yangjianzj 发表于 2022-7-26 01:11
@homedrive在OOBE中是空值
所以你这个@HomeDrive & "\Program Files"在OOBE中也是错的!在OOBE中值等于\ ...

我主要是用来写软件自动静默安装,和OOBE没啥关系
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

听雨yu

1624

活跃

0

技术

0

互助
签到任务
最火的业界新闻
  • 300W快充不只一家!曝欧加系正计划极高功率
  • 300W快充遥遥领先!充电最快的Redmi新机下
  • 徕卡+双长焦史无前例!小米13 Ultra曝光
  • 700W功耗性能猛兽 售价超24万元 NVIDIA称H1
  • AMD大小核与Intel完全不一样!统一Zen4架构
  • AMD新一代APU曝光:大小核架构终于上了
  • 正面颜值堪称完美!努比亚Z50 Ultra真机亮
  • 苹果拒绝翻车!iPhone 15 Pro独享A17大曝光
  • 小米MIX Fold 3下半年登场:真全面屏MIX回
  • 创始人:RISC-V架构比ARM/x86简单好用 将成
炫酷的硬件Show
  • MARK 1 - 设计型 PC 与垂直风道
  • 好的大王,没问题大王
  • 振华SUPER FLOWER 铜皇450W 铜牌电源
  • 比小更小,Mini-STX装机
  • 华擎X99E-ITX + 银欣ML06 装机记
  • 最强双路泰坦硬管水冷 制作流程
  • 银欣FT02,双路E5工作站
  • 迟到的定制机箱小钢炮清理灰尘
  • 乔思伯UMX1 Plus,小巧的家用综合主机
  • 分体水冷第二弹-Inwin 805 infinity
有趣的美图分享
  • 作业补不完了
  • 无敌辟邪大法
  • 馕是不是有点太过分了啊?
  • 老板给我拿个软饭
  • 病人:我不就是手骨个折吗?
关注官方微信
快速回复 返回顶部 返回列表