标题:
[系统相关]
bat转成EXE在64位操作系统下为何无法正常运行?
[打印本页]
作者:
chenyin163
时间:
2012-4-5 11:37
标题:
bat转成EXE在64位操作系统下为何无法正常运行?
现在是一个超级运行时代,大程序带来了大内存,大内存无疑把64位系统逐步推向主流。
小弟昨天编好的bat 在任何WIN操作系统下运行都没有问题。
但是只要使用任一软件打包成exe后,在32位XP、32位Win7下运行没有问题,一旦到64位Win7下运行,就会出现问题。
后来发现此exe在win7 64下被认作 32位exe ,所以系统会自动将此程序相关执行命令作转向,主要转向如下:
1、凡是对 system32 目录的读、写、删,会自动转向到 sysyWoW64 去操作;
2、凡是对 Program Files 目录的读、写、删,会自动转向到 Program Files (x86)去操作;
3、凡是对注册表 HKEY_LOCAL_MACHINE\SOFTWARE 或者 HKEY_CURRENT_USER\Software 的操作会自动转向到相应Software目录下的 Wow6432Node 项下去操作。
以上的3个转向就让32位的exe无法执行64位的相关目录与注册表。32位的程序无法服务64位系统!
而bat在32位XP、32位Win7下自动调用的是32位cmd操作,在64位Win7下会自动调用64位的cmd操作,均可以对任何目录、注册表项作处理。
现在的问题是:
1、有没有可以讲bat转成64位exe的封装软件??
(感觉到最新款的exescript似乎可以支持64位,截图如下,不知道是不是呢?只是现在没有正式版可用,试用的也就只支持32位的)
2、
C#里面可以调用相关的API来关闭和打开这种转向。常用的函数有3个:
Wow64DisableWow64FsRedirection(关闭系统转 向),
Wow64RevertWow64FsRedirection(打开系统转向),
Wow64EnableWow64FsRedirection(打 开系统转向)。
请问批处理bat有没有类似的转向开关呢??
作者:
chenyin163
时间:
2012-4-5 11:43
本帖最后由 chenyin163 于 2012-4-5 16:29 编辑
我原先想到几个方法想要解决似乎都是死路
1、
让exe生成一个bat,内容包含:修改注册表+自杀
然后再用exe向注册表里的RunOnce加一条一次性开机执行的键。
此键会被写入到Wow6432Node下的RunOnce里,好在也能被开机执行。
但是Wow6432Node下的RunOnce里执行的bat命令,自动调用的是sysyWoW64目录下的 32位cmd来执行,还是无法修改64位注册表!
2、
我试图起初将system目录下的64位cmd先复制到其他位置(如c:\),然后在Wow6432Node下的RunOnce里增加
c:\cmd.exe /c XX.bat
如果在系统运行下键入这个命令式是可以实现修改的,但是让系统自行启动,任然无效。
看来微软就是咬定Wow6432Node下的RunOnce里的任何程序都无法写入64位注册表了!
无奈啊!真想骂娘了~
各位有何解决思路??
或者有没有啥办法让exe判断是否64位系统,如果是,调用64位cmd来处理啊?
额~这个似乎是封装程序可以办到的事情,是不?
作者:
neorobin
时间:
2012-4-5 21:20
试试用 64 位的 winrar 把 BAT 做成自解压包, 并在自解后启动 BAT
作者:
neorobin
时间:
2012-4-5 21:45
另外用 cmd (无论执行的是 32 位还是 64 位版)来判断系统位数, 论坛里已经有解决方案:
http://www.bathome.net/viewthrea ... ;highlight=64%CE%BB
作者:
chenyin163
时间:
2012-4-6 14:03
回复
4#
neorobin
谢谢!~
不过,我现在问题不是在判断是否64位,关键在于怎样用32位exe去写64位注册表问题!~
作者:
dennisle
时间:
2012-4-7 08:48
回复
1#
chenyin163
支前也遇到與你相同的問題
http://bbs.bathome.net/viewthread.php?tid=12769&highlight=
後來解決的方法是藉助 "Registry Workshop" 批處理調用 RegWorkshopX64.exe 來達成寫入Win7_x64
希望對你有幫助!
作者:
chenyin163
时间:
2012-4-8 16:01
回复
6#
dennisle
谢谢!~
作者:
heimahack
时间:
2012-9-12 10:20
我也遇到了类问题,希望可以改写注册表的路径,可以解决问题。
作者:
wnsdt
时间:
2013-5-29 10:16
新版的QuickBFC和ExeScript都可以,已经在64位的windows 7 和windows 2008上测试成功。
qintel 发表于 2012-7-30 14:46
请问是哪个版本?网上能找到的最新版的这两个软件我都试了,并不能解决楼主的问题
你试试用这两个最新版软件将这段代码转换成exe运行,看看结果就知道了
@echo off
echo %PROCESSOR_ARCHITECTURE%
pause
如果你是64位系统,直接运行bat结果正确就是AMD64,但是转译成exe后,在64为系统下运行结果为x86
求助高人,如何解决此问题
作者:
garyv
时间:
2013-5-29 17:22
本帖最后由 garyv 于 2013-5-29 17:24 编辑
回复
10#
wnsdt
不知那转换工具是否有64bit的版本,或者加一个什么参数能生成64bit的exe。如果生成的是32bit的exe的话,结果就是x86,因为64bit的Win7为每个32bit应用程序提供的运行环境就是一个完整的32bit x86,注意不是模拟的就是一个硬的32bit环境,或者说是IA-32e的Compatibility mode。
欢迎光临 批处理之家 (http://bbs.bathome.net/)
Powered by Discuz! 7.2