无忧启动论坛

标题: win7x64位系统下,运行批处理bat正常,做成自解压就无法运行! [打印本页]

作者: zhxy9804    时间: 2014-12-4 15:11
标题: win7x64位系统下,运行批处理bat正常,做成自解压就无法运行!
可下载下面的附件测试,直接双击,提示不正常,解压出到任意位置,双击运行正常,
实在是百思不得其解了,特来求教,谢谢?!

123.rar

102.46 KB, 下载次数: 26, 下载积分: 无忧币 -2


作者: 8696648    时间: 2014-12-4 15:16
这是一个用WINRAR做成的自解压式运行文件,在制作的时候是加了运行参数的:Path=c:\windows\
SavePath
Setup=c:\windows\123.cmd
Silent=2
Overwrite=1
在压缩包中执行和解压缩之后运行是不是和这几个命令行有关?请其他老大补充。
作者: zhxy9804    时间: 2014-12-4 15:20
不是,大体是跟32位cmd和64位cmd有关系,双击其实是调用的32位cmd,自解压是调用的64位cmd
作者: 8696648    时间: 2014-12-4 15:21
嗯,谢谢。我是在64位W 8.1系统下测试的,情况确如您所说。
作者: zhxy9804    时间: 2014-12-4 15:25
是的,所以我很纳闷,如何破解这个谜团,郁闷!
作者: ku588    时间: 2014-12-4 15:53
本帖最后由 ku588 于 2014-12-4 17:16 编辑

制作自解压文件时,制作64位程序,在“模块”中选择Default64.sfx
这个问题可能与Winrar自身制作自解压文件运行时的CMD调用有关,
只有选择制作64位的自解压程序进行CMD命令调用。


作者: zhxy9804    时间: 2014-12-4 19:23
ku588 发表于 2014-12-4 15:53
制作自解压文件时,制作64位程序,在“模块”中选择Default64.sfx
这个问题可能与Winrar自身制作自解压文 ...

就算这样可行,那这程序也无法在xp下面运行了,唉
作者: ku588    时间: 2014-12-5 08:34
本帖最后由 ku588 于 2014-12-5 10:50 编辑

给你个思路吧:
把下面的批处理做成64位的自解压运行程序:

@echo off
cd /d %~dp0
start  %SystemRoot%\system32\secpol.msc

----------------------------------------------------------
在 123.cmd 中加入判断64位,32位系统的语句,根据相应的判断去执行相对的命令:

32位系统直接执行:
start  %SystemRoot%\system32\secpol.msc

64位系统执行64位的自解压运行程序,
----------------------------------------------------------
把上面做好的两个文件用Winrar重新打包创建32位的Winrar自解压运行程序,并执行123.cmd,

通过上面的方法就可以解决了,虽然方法有点笨,但能解决问题。

==========================================================

做好的程序:XP,Win7 32位,Win7 64位都没问题:

123.rar

205.41 KB, 下载次数: 17, 下载积分: 无忧币 -2


作者: zhxy9804    时间: 2014-12-5 16:50
ku588 发表于 2014-12-5 08:34
给你个思路吧:
把下面的批处理做成64位的自解压运行程序:

嗯,这样子其实相当于两个程序了,不过也算是曲线救国了
if /i "%PROCESSOR_IDENTIFIER:~0,3%" == "X86" goto 1 /////通过参数判定操作系统位数,并跳转
if /i "%PROCESSOR_IDENTIFIER:~0,3%" NEQ "X86" goto 2 ///此条语句后面可以改为 EQU "EM6"
作者: ku588    时间: 2014-12-5 18:22
zhxy9804 发表于 2014-12-5 16:50
嗯,这样子其实相当于两个程序了,不过也算是曲线救国了
if /i "%PROCESSOR_IDENTIFIER:~0,3%" == "X86" ...

又仔细看了下: 包内的 123.cmd 中有个小失误:

2  /////64位系统
start  start  %SystemRoot%\123.exe

多了个 start 会显示 DOS 窗口,去掉一个。

作者: wylgogogo    时间: 2014-12-5 20:56
                哦,我也学习了下。
作者: 坏坏小生    时间: 2014-12-6 10:33
因为你的EXE是32位的,任何调用System32目录都会自动转向SysWOW64,当然会出错啦

解压出来运行,是由64位的explorer启动,不会出现转向现象,所以没问题

解决办法,用API先关闭掉自转向,再执行批处理,运行结束后再打开!
作者: zhxy9804    时间: 2014-12-6 11:48
坏坏小生 发表于 2014-12-6 10:33
因为你的EXE是32位的,任何调用System32目录都会自动转向SysWOW64,当然会出错啦

解压出来运行,是由64 ...

api关闭自动转向,这个如何处理?
作者: 坏坏小生    时间: 2014-12-6 12:54
zhxy9804 发表于 2014-12-6 11:48
api关闭自动转向,这个如何处理?

调用kernel32.dll 的 Wow64DisableWow64FsRedirection函数禁止自动转向


Wow64RevertWow64FsRedirection还源
作者: zhxy9804    时间: 2014-12-6 12:56
坏坏小生 发表于 2014-12-6 12:54
调用kernel32.dll 的 Wow64DisableWow64FsRedirection函数禁止自动转向

这不是小题大做了,再说,这不是批处理能搞定的把?
作者: spadek    时间: 2014-12-6 13:33
用7z.SFX.Builder。

123.zip (66.8 KB, 下载次数: 20)
作者: zhxy9804    时间: 2014-12-6 13:41
spadek 发表于 2014-12-6 13:33
用7z.SFX.Builder。

做的能在xp下运行吗?
作者: spadek    时间: 2014-12-6 13:42
zhxy9804 发表于 2014-12-6 13:41
做的能在xp下运行吗?

当然可以,X86模块打包。
作者: zhxy9804    时间: 2014-12-6 14:45
spadek 发表于 2014-12-6 13:42
当然可以,X86模块打包。

不错,不错!
作者: zhxy9804    时间: 2014-12-6 14:58
spadek 发表于 2014-12-6 13:42
当然可以,X86模块打包。

麻烦大体写一下用法,谢谢!不知道怎么用呢,呵呵
作者: spadek    时间: 2014-12-6 15:27
zhxy9804 发表于 2014-12-6 14:58
麻烦大体写一下用法,谢谢!不知道怎么用呢,呵呵

http://spadek.blog.163.com/blog/static/209506080201372410348293/

有个简单使用教程,另外你用它打开123.exe,就能看到123.exe里面设置的运行参数。
作者: zhxy9804    时间: 2014-12-6 15:50
spadek 发表于 2014-12-6 15:27
http://spadek.blog.163.com/blog/static/209506080201372410348293/

有个简单使用教程,另外你用它打 ...

谢谢!




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3