找回密码
 加入
搜索
查看: 19043|回复: 15

[系统综合] 64位系统下编译的程序如何在32位上运行.

 火.. [复制链接]
发表于 2015-1-15 01:04:06 | 显示全部楼层 |阅读模式
本帖最后由 nxfhcsj 于 2015-1-15 01:06 编辑

64位系统下编译的EXE无法在32位系统上运行..
但是加#AutoIt3Wrapper_UseX64=n 的话.. 程序在64位下的一个功能又失效了.请教大家如何完美解决.
比如如下脚本;
FileMove(@SystemDir & "\taskmgr.ex_", @SystemDir & "\taskmgr.exe", 9)
这条脚本在win7 64位下面可以成功运行并生效.但是这个时候生成的exe文件无法在32位上运行.
在脚本前加上#AutoIt3Wrapper_UseX64=n  编译后能在32位系统上运行,但是拿到64位上运行以后,不能生效..
请教各位大大,如何完美解决呢?   既能在32位上运行,还能在64位上生效.
发表于 2015-1-15 09:09:09 | 显示全部楼层
学习学习。。。。。。。。。。。。。。。。。。
 楼主| 发表于 2015-1-15 14:21:00 | 显示全部楼层
如果要在32位系统下写一个代码,可以在64位系统下重命名system32\taskmgr.exe   怎么实现呢?
现在只能在64位下写好并编译能重命名.. 相同的代码到32位系统下编译,然后拿到64位系统下运行..   是失败的..
发表于 2015-1-17 07:55:29 | 显示全部楼层
本帖最后由 skyfree 于 2015-1-17 07:56 编辑

1、编译参数设置
#AutoIt3Wrapper_UseX64=n
将程序编译为X86应用程序

2、如果是X64系统则关闭重定向,可以解决你x86应用程序不能正常访问system32的问题
If @OSArch='x64' Then DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
3、如果你还有注册表类操作,HKLM需要写成HKLM64,可以预先声明个全局常量
Global Const $_HKLM = _Key_GetHKLM()

Func _Key_GetHKLM()
        If @OSArch = 'x86' Then
                Return 'HKLM'
        ElseIf @OSArch = 'x64' Then
                Return 'HKLM64'
        EndIf
EndFunc   ;==>_Key_GetHKLM
其他注册表项,如HKCU、HKCR、HKU、HKCC等,如上例方法炮制。

其实这部分内容在《Let's AutoIt Plus》Level5中有详细的解释,有兴趣可以看下。http://au3.cc/thread-921-1-1.html
发表于 2015-1-17 21:47:21 | 显示全部楼层
S大过来解答问题了,强!!!
发表于 2015-1-18 19:08:58 | 显示全部楼层
回复 4# skyfree


    好久不见。。
发表于 2015-1-19 00:13:39 | 显示全部楼层
回复 4# skyfree

是这样用吗?为什么没有效果呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2015-1-20 09:03:09 | 显示全部楼层
回复 7# haijie1223


    估计可能是版本问题吧~~ 用3.3.12.0 试下~
发表于 2015-1-20 12:57:13 | 显示全部楼层
回复 8# austere


    3.3.13.19
发表于 2015-1-20 13:07:33 | 显示全部楼层
..... 我感觉12以上的都不是很好用,编译后的版本等都没有了,没有老肖做的好啊~~
发表于 2015-1-22 12:05:06 | 显示全部楼层
回复 7# haijie1223


    你用宏是没有用的,懂?你宏@SystemDir就是在x86下是system32,在x64下就是syswow64,你关了重定向又不会改变宏的值!手写 windows\system32 就可以了!
发表于 2015-1-22 12:05:39 | 显示全部楼层
回复 8# austere


    和版本无关,他写的就不对,没理解宏指代的是什么。
发表于 2015-1-22 13:10:28 | 显示全部楼层
回复 11# skyfree

问题是这样,在x64系统中:用x86运行时,宏@system就存贮syswow64路径;用x64运行就指向system32路径。
看来我确实没有搞明白宏的定义,难道宏只是类似存储固定路径的一个变量?不应该啊,我一直以为宏就是类似环境变量一样的东西,不是固定路径,而是总是指向系统目录:比如,xp中的默认桌面路径改变了,那么用@desktop也会指向新的路径啊,而不是默认路径吧~
发表于 2015-1-22 13:18:16 | 显示全部楼层
回复 11# skyfree


    是不是应该这么理解,32位程序在64位系统中运行时,系统分配给32位程序的@system宏路径本身就是syswow64,而不是system32路径,所以重定向关闭与否和他是没有关系的。
   微软这样设置不知有何意义,好操蛋~
发表于 2015-1-22 16:22:44 | 显示全部楼层
回复 13# haijie1223


    这问题应该源自于宏的创建方式,这个宏的值的读取方法如果就没考虑关闭重定向这个问题,那它只会机械的读取路径,而不会去变通。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 10:47 , Processed in 0.167655 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表