无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7021|回复: 21
打印 上一主题 下一主题

[求助] win7x64位系统下,运行批处理bat正常,做成自解压就无法运行!

[复制链接]
跳转到指定楼层
1#
发表于 2014-12-4 15:11:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可下载下面的附件测试,直接双击,提示不正常,解压出到任意位置,双击运行正常,
实在是百思不得其解了,特来求教,谢谢?!

123.rar

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

推荐
 楼主| 发表于 2014-12-5 16:50:16 | 只看该作者
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"

点评

又仔细看了下: 包内的 123.cmd 中有个小失误: 2 /////64位系统 start start %SystemRoot%\123.exe 多了个 start 会显示 DOS 窗口,去掉一个。  详情 回复 发表于 2014-12-5 18:22
回复

使用道具 举报

2#
发表于 2014-12-4 15:16:36 | 只看该作者
这是一个用WINRAR做成的自解压式运行文件,在制作的时候是加了运行参数的:Path=c:\windows\
SavePath
Setup=c:\windows\123.cmd
Silent=2
Overwrite=1
在压缩包中执行和解压缩之后运行是不是和这几个命令行有关?请其他老大补充。
回复

使用道具 举报

3#
 楼主| 发表于 2014-12-4 15:20:39 | 只看该作者
不是,大体是跟32位cmd和64位cmd有关系,双击其实是调用的32位cmd,自解压是调用的64位cmd
回复

使用道具 举报

4#
发表于 2014-12-4 15:21:50 | 只看该作者
嗯,谢谢。我是在64位W 8.1系统下测试的,情况确如您所说。
回复

使用道具 举报

5#
 楼主| 发表于 2014-12-4 15:25:04 | 只看该作者
是的,所以我很纳闷,如何破解这个谜团,郁闷!
回复

使用道具 举报

6#
发表于 2014-12-4 15:53:28 | 只看该作者
本帖最后由 ku588 于 2014-12-4 17:16 编辑

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

点评

就算这样可行,那这程序也无法在xp下面运行了,唉  详情 回复 发表于 2014-12-4 19:23
回复

使用道具 举报

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

就算这样可行,那这程序也无法在xp下面运行了,唉
回复

使用道具 举报

8#
发表于 2014-12-5 08:34:13 | 只看该作者
本帖最后由 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

点评

嗯,这样子其实相当于两个程序了,不过也算是曲线救国了 if /i "%PROCESSOR_IDENTIFIER:~0,3%" == "X86" goto 1 /////通过参数判定操作系统位数,并跳转 if /i "%PROCESSOR_IDENTIFIER:~0,3%" NEQ "X86" goto 2 //  详情 回复 发表于 2014-12-5 16:50
回复

使用道具 举报

10#
发表于 2014-12-5 18:22:02 | 只看该作者
zhxy9804 发表于 2014-12-5 16:50
嗯,这样子其实相当于两个程序了,不过也算是曲线救国了
if /i "%PROCESSOR_IDENTIFIER:~0,3%" == "X86" ...

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

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

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

使用道具 举报

11#
发表于 2014-12-5 20:56:20 | 只看该作者
                哦,我也学习了下。
回复

使用道具 举报

12#
发表于 2014-12-6 10:33:58 | 只看该作者
因为你的EXE是32位的,任何调用System32目录都会自动转向SysWOW64,当然会出错啦

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

解决办法,用API先关闭掉自转向,再执行批处理,运行结束后再打开!

点评

api关闭自动转向,这个如何处理?  详情 回复 发表于 2014-12-6 11:48
回复

使用道具 举报

13#
 楼主| 发表于 2014-12-6 11:48:43 | 只看该作者
坏坏小生 发表于 2014-12-6 10:33
因为你的EXE是32位的,任何调用System32目录都会自动转向SysWOW64,当然会出错啦

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

api关闭自动转向,这个如何处理?

点评

调用kernel32.dll 的 Wow64DisableWow64FsRedirection函数禁止自动转向 Wow64RevertWow64FsRedirection还源  详情 回复 发表于 2014-12-6 12:54
回复

使用道具 举报

14#
发表于 2014-12-6 12:54:49 | 只看该作者
zhxy9804 发表于 2014-12-6 11:48
api关闭自动转向,这个如何处理?

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


Wow64RevertWow64FsRedirection还源

点评

这不是小题大做了,再说,这不是批处理能搞定的把?  详情 回复 发表于 2014-12-6 12:56
回复

使用道具 举报

15#
 楼主| 发表于 2014-12-6 12:56:25 | 只看该作者
坏坏小生 发表于 2014-12-6 12:54
调用kernel32.dll 的 Wow64DisableWow64FsRedirection函数禁止自动转向

这不是小题大做了,再说,这不是批处理能搞定的把?
回复

使用道具 举报

16#
发表于 2014-12-6 13:33:28 | 只看该作者
用7z.SFX.Builder。

123.zip (66.8 KB, 下载次数: 20)

点评

做的能在xp下运行吗?  详情 回复 发表于 2014-12-6 13:41
回复

使用道具 举报

17#
 楼主| 发表于 2014-12-6 13:41:09 | 只看该作者

做的能在xp下运行吗?

点评

当然可以,X86模块打包。  详情 回复 发表于 2014-12-6 13:42
回复

使用道具 举报

18#
发表于 2014-12-6 13:42:04 | 只看该作者
zhxy9804 发表于 2014-12-6 13:41
做的能在xp下运行吗?

当然可以,X86模块打包。

点评

麻烦大体写一下用法,谢谢!不知道怎么用呢,呵呵  详情 回复 发表于 2014-12-6 14:58
不错,不错!  详情 回复 发表于 2014-12-6 14:45
回复

使用道具 举报

19#
 楼主| 发表于 2014-12-6 14:45:49 | 只看该作者
spadek 发表于 2014-12-6 13:42
当然可以,X86模块打包。

不错,不错!
回复

使用道具 举报

20#
 楼主| 发表于 2014-12-6 14:58:08 | 只看该作者
spadek 发表于 2014-12-6 13:42
当然可以,X86模块打包。

麻烦大体写一下用法,谢谢!不知道怎么用呢,呵呵

点评

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

使用道具 举报

21#
发表于 2014-12-6 15:27:27 | 只看该作者
zhxy9804 发表于 2014-12-6 14:58
麻烦大体写一下用法,谢谢!不知道怎么用呢,呵呵

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

有个简单使用教程,另外你用它打开123.exe,就能看到123.exe里面设置的运行参数。

点评

谢谢!  详情 回复 发表于 2014-12-6 15:50
回复

使用道具 举报

22#
 楼主| 发表于 2014-12-6 15:50:29 | 只看该作者
spadek 发表于 2014-12-6 15:27
http://spadek.blog.163.com/blog/static/209506080201372410348293/

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

谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-23 19:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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