[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 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有没有类似的转向开关呢??

本帖最后由 garyv 于 2013-5-29 17:24 编辑

回复 10# wnsdt


    不知那转换工具是否有64bit的版本,或者加一个什么参数能生成64bit的exe。如果生成的是32bit的exe的话,结果就是x86,因为64bit的Win7为每个32bit应用程序提供的运行环境就是一个完整的32bit x86,注意不是模拟的就是一个硬的32bit环境,或者说是IA-32e的Compatibility mode。

TOP

新版的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


求助高人,如何解决此问题

TOP

我也遇到了类问题,希望可以改写注册表的路径,可以解决问题。

TOP

回复 6# dennisle


    谢谢!~

TOP

回复 1# chenyin163

支前也遇到與你相同的問題
http://bbs.bathome.net/viewthread.php?tid=12769&highlight=

後來解決的方法是藉助 "Registry Workshop" 批處理調用 RegWorkshopX64.exe 來達成寫入Win7_x64
希望對你有幫助!

TOP

回复 4# neorobin


    谢谢!~

不过,我现在问题不是在判断是否64位,关键在于怎样用32位exe去写64位注册表问题!~

TOP

另外用 cmd (无论执行的是 32 位还是 64 位版)来判断系统位数, 论坛里已经有解决方案:

http://www.bathome.net/viewthrea ... ;highlight=64%CE%BB

TOP

试试用 64 位的 winrar 把 BAT 做成自解压包, 并在自解后启动 BAT

TOP

本帖最后由 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来处理啊?
额~这个似乎是封装程序可以办到的事情,是不?

TOP

返回列表