Board logo

标题: [系统相关] 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://www.bathome.net/) Powered by Discuz! 7.2