中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [讨论]explorer进程的特殊性 上一主题 | 下一主题
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『楼 主』:  [讨论]explorer进程的特殊性

To All:

      前日,完成一个对文件夹进行处理的批处理代码。其中有一段代码意图使用资源浏览器打开操作后的文件夹,待用户确认无误关闭该文件夹的浏览器窗口后,执行后续的处理操作。代码如下:

      但结果发现,start /w “并未起到其应有的作用”,也就是说,在打开test文件夹之后,未等待其关闭,就已经输出Program is finished.和return errorlevel: 0了,其它后续操作也被依次执行,直至该文件夹被删除后,浏览器窗口被自动关闭。

      当然,在这里我不主张去怀疑 start/w 是否存在什么Bug,而是去思考资源浏览器的explorer进程是否有什么特殊性,使其影响了 start/w 的表现。
md test
:: other codes
start /w test & echo Program is finished.
:: return errorlevel: 0
::start /w explorer test & echo Is finished.
:: return errorlevel: 1
echo return errorlevel: %errorlevel%
:: other codes
[ Last edited by willsort on 2006-6-20 at 11:17 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-20 10:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用
    程序终止就返回命令提示。如果在命令脚本内执行,该新行为
    则不会发生。

以上是START命令帮助中写到的.............

2006-6-20 10:40
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 3 楼』:  

噢,SORRY,wil说的是,我刚才没有试验其他程序,确实,其他程序是等待其窗口才继续执行,EXPLORER.EXE确不是,有待考虑........

2006-6-20 10:44
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 4 楼』:  

本人觉得EXPLORER打开目录的动作,只要打开了就结束进程从而继续执行程序的,而其他程序例如执行SOL.EXE纸牌程序,用START执行的时候是挂起状态所以不会继续执行,EXPLORER只是一个执行动作,而这个动作结束后就会继续执行脚本以下的命令,打开TEST目录则是最终结果。

2006-6-20 10:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 5 楼』:  

Re bagpipe(2楼):

      这个信息似乎不能说明什么。

      一者,我确是在命令脚本中执行的,但该行为仍然发生了;

      二者,对于同样是 32-位 GUI 应用程序的notepad和calc之流,他们仍然受着start/w的影响,无论在命令行还是在批处理;

      三者,即使在脚本中,未使用/w调用notepad或者calc,也仍然是未等关闭便返回了;只是,是否返回命令提示,那要看脚本是否在命令行中运行,以及是否完成运行。

Re bagpipe(4楼):

      兄提到了“挂起”,这让我想起,explorer作为Windows的外壳通常是不应被挂起的,否则桌面操作将无法保证。

      但是,我们的start test并未开启新的explorer进程,而只是在explorer进程内增加了一个test线程,这与新建进程的32位程序和不新建进程和线程的内部命令都不太相同。

      所以,我们的立足点仍是要寻找explorer有什么特殊性,尤其是在进程或线程状态上有什么特殊性。

[ Last edited by willsort on 2006-6-20 at 11:01 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-20 10:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  请大家小心,Willsort编了一段病毒代码

  情况是这样的:当我把这段代码copy下来之后,放到单独的批处理中运行之后,立马弹出了上百个CMD窗口,不断提示"子目录或者文件 test 已经存在",搞得我手忙脚乱,好不容易终止了CMD进程,后来在每句执行语句后加上了一个pause来单步执行,截取到的屏幕如下所示。

  后来发现,无论start是否起用参数 /w ,都会出现这个问题,而去掉start /w之后,则不会打开test,而用explorer test语句,则可以顺利打开。

  既然是这样,是否可以这样推断:在CMD的默认设置中,文件夹和资源管理器并没有关联起来,所以要指定文件夹的打开方式?

附件 1: error.gif (2006-6-20 11:00, 23.68 K, 下载附件所需积分 1 点 ,下载次数: 7)


2006-6-20 11:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 7 楼』:  

Re namejm:

      应该是把代码存到 test.cmd 或者 test.bat 中的问题,兄以前似乎有过同样的同名错误。

      文件与文件夹与对应程序的关联与CMD无关,而是在注册表的相应键值中,因为文件夹并非像.txt那样,采用扩展名间接关联,所以CMD无法识别。

[ Last edited by willsort on 2006-6-20 at 11:14 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-20 11:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 8 楼』:  

我猜是namejm兄目录中有个TEST.BAT或者TEST.CMD的批处理程序,呵呵 ...........

2006-6-20 11:10
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 9 楼』:  

EXPLORER参数TAG:技术文章
使用命令行参数,您既可以自定义 Windows 资源管理器启动时使用的默认视图,也可以指定在从命令提示符启动时所看到的视图。

您可以在 Explorer.exe 命令中使用以下参数。

参数 结果
/n  为默认选择内容打开一个新的单窗格窗口。
默认选择内容通常是安装 Windows 的驱动器的根目录。
/e 使用默认视图启动 Windows 资源管理器。
/e, <object> 使用默认视图启动 Windows 资源管理器并把焦点定位在指定文件夹上。
/root, <object> 打开指定对象的一个窗口视图。
/select, <object> 打开一个窗口视图,指定的文件夹、文件或
程序被选中。


回到顶端

从命令提示符下运行 Windows 资源管理器
若要从命令提示符下运行 Windows 资源管理器,请: 1. 单击开始,然后单击运行。
2. 在打开框中,键入 Explorer,然后单击确定。

示例
以下示例说明了 Windows 资源管理器参数的用法。 ? Explorer /n
此命令使用默认设置打开一个资源管理器窗口。显示的内容通常是安装 Windows 的驱动器的根目录。
? Explorer /e
此命令使用默认视图启动 Windows 资源管理器。
? Explorer /e,C:\Windows
此命令使用默认视图启动 Windows 资源管理器,并把焦点定位在 C:\Windows。
? Explorer /root, C:\Windows\Cursors
此命令启动 Windows 资源管理器后焦点定位在 C:\Windows\Cursors folder。此示例使用 C:\Windows\Cursors 作为 Windows 资源管理器的“根”目录。

备注:请注意命令中“/root”参数后面的逗号。
? Explorer /select, C:\Windows\Cursors\banana.ani
此命令启动 Windows 资源管理器后选定“C:\Windows\Cursors\banana.ani”文件。

备注£o请注意命令中“/select”参数后面的逗号。
Windows 资源管理器参数可以在一个命令中进行组合。以下示例显示了 Windows 资源管理器命令行参数的组合。 ? Explorer /root, \\server\share, select, Program.exe
此命令启动 Windows 资源管理器时以远程共享作为“根”文件夹,而且 Program.exe 文件将被选中。

回到顶端

更改 Windows 资源管理器默认启动文件夹
若要更改 Windows 资源管理器的默认启动文件夹,请: 1. 单击开始,指向所有程序,指向附件,然后右键单击Windows Explorer。
2. 在出现的菜单上,单击属性。
3. 在“目标”框中,将“/root”命令行参数附加到“%SystemRoot%\Explorer.exe”命令之后,并使用您希望的启动位置。例如,如果您希望 Windows 资源管理器启动后定位在 C 驱动器的根,则请将该命令编辑为:
%SystemRoot%\Explorer.exe /root, C:\


偶也顺便提供一下EXPLORER的参数吧,呵呵

2006-6-20 11:14
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 10 楼』:  

  呵呵,确实是把文件名写成test.bat了,习惯问题,哎,见笑了。

2006-6-20 11:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 11 楼』:  

因为explorer是常驻内存的~~~运行批处理前 先 开始 ---> 关闭计算机 然后Ctrl+Alt+Shift+点击取消 把explorer关了




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-21 14:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sohu
新手上路





积分 14
发帖 13
注册 2010-12-1
状态 离线
『第 12 楼』:  

一知半解、、、

2010-12-4 15:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: