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 | 显示全部楼层

活跃 21701| 技术 23| 互助 47| 钻石 340

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

点评

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

活跃 712| 技术 0| 互助 0| 钻石 0

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

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

活跃 21701| 技术 23| 互助 47| 钻石 340

你运行一下这个脚本试试?
  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 | 显示全部楼层

活跃 712| 技术 0| 互助 0| 钻石 0

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

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

活跃 5518| 技术 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 | 显示全部楼层

活跃 712| 技术 0| 互助 0| 钻石 0

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 | 显示全部楼层

活跃 21701| 技术 23| 互助 47| 钻石 340

听雨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 | 显示全部楼层

活跃 3170| 技术 0| 互助 0| 钻石 340

直接调用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 | 显示全部楼层

活跃 5518| 技术 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 | 显示全部楼层

活跃 712| 技术 0| 互助 0| 钻石 0

浅暮丶千殇 发表于 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 | 显示全部楼层

活跃 712| 技术 0| 互助 0| 钻石 0

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

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

本版积分规则

听雨yu

712

活跃

0

技术

0

互助
签到任务
最火的业界新闻
  • 明年才是重头戏!曝iPhone 15系列将取消实
  • 业内人士:感谢竞争 今年第二代骁龙8、天玑
  • PC搅局者来了!Arm杀入:剑指英特尔AMD
  • Intel也玩弯道超车:EUV工艺生产量子芯片
  • “4nm、3nm”EUV工艺来了 Intel最先进晶圆
  • 高通骁龙8 Gen2本周发!网友:王者芯片归来
  • 天玑8200杀疯!冲击高频率 碾压二代骁龙7
  • 英特尔i7-13700H移动处理器现身:性能惊喜
  • RTX 4080明日发售 AMD摊牌了!晒RX 7900 XT
  • 偷师锐龙 远超锐龙:AMD RDNA3显卡的小芯片
炫酷的硬件Show
  • MARK 1 - 设计型 PC 与垂直风道
  • 好的大王,没问题大王
  • 振华SUPER FLOWER 铜皇450W 铜牌电源
  • 比小更小,Mini-STX装机
  • 华擎X99E-ITX + 银欣ML06 装机记
  • 最强双路泰坦硬管水冷 制作流程
  • 银欣FT02,双路E5工作站
  • 迟到的定制机箱小钢炮清理灰尘
  • 乔思伯UMX1 Plus,小巧的家用综合主机
  • 分体水冷第二弹-Inwin 805 infinity
有趣的美图分享
  • 电池行业这方面没了你不行
  • 经常被性急的破门而入
  • 奶奶:狗子头七还魂了这是?
  • 你写的取鲁大学,关我耶鲁大学什么事
  • 学校有心了, 喝凉水还放海带
  • 超市货品丰富齐备
  • 传教工作进行中
  • 谁不想rua一下呢?
  • 突然理解艺术了
  • 现身说法
关注官方微信
快速回复 返回顶部 返回列表