Board logo

标题: [讨论]explorer进程的特殊性 [打印本页]

作者: willsort     时间: 2006-6-20 10:25    标题: [讨论]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 ]
作者: bagpipe     时间: 2006-6-20 10:40
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用
    程序终止就返回命令提示。如果在命令脚本内执行,该新行为
    则不会发生。

以上是START命令帮助中写到的.............
作者: bagpipe     时间: 2006-6-20 10:44
噢,SORRY,wil说的是,我刚才没有试验其他程序,确实,其他程序是等待其窗口才继续执行,EXPLORER.EXE确不是,有待考虑........
作者: bagpipe     时间: 2006-6-20 10:48
本人觉得EXPLORER打开目录的动作,只要打开了就结束进程从而继续执行程序的,而其他程序例如执行SOL.EXE纸牌程序,用START执行的时候是挂起状态所以不会继续执行,EXPLORER只是一个执行动作,而这个动作结束后就会继续执行脚本以下的命令,打开TEST目录则是最终结果。
作者: willsort     时间: 2006-6-20 10:51
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 ]
作者: namejm     时间: 2006-6-20 11:00
  请大家小心,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)



作者: willsort     时间: 2006-6-20 11:06
Re namejm:

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

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

[ Last edited by willsort on 2006-6-20 at 11:14 ]
作者: bagpipe     时间: 2006-6-20 11:10
我猜是namejm兄目录中有个TEST.BAT或者TEST.CMD的批处理程序,呵呵 ...........
作者: bagpipe     时间: 2006-6-20 11:14
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的参数吧,呵呵
作者: namejm     时间: 2006-6-20 11:20
  呵呵,确实是把文件名写成test.bat了,习惯问题,哎,见笑了。
作者: electronixtar     时间: 2006-6-21 14:12
因为explorer是常驻内存的~~~运行批处理前 先 开始 ---> 关闭计算机 然后Ctrl+Alt+Shift+点击取消 把explorer关了
作者: sohu     时间: 2010-12-4 15:36
一知半解、、、