[导入]Process.Start容易忽视的一个问题

请谨慎使用Process.Start(path),尽量使用Process.Start(ProcessStartInfo),这样可用保证代码的稳定性。

Process.Start(path)在启动一个新的进程时非常方便,但往往我们会忽视一个小的细节,不知道当前进程的WorkingDirectory。用Reflector跟踪了一下Process.Start的原理,简单的说就是Process.Start(path)会先根据path新建一个ProcessStartInfo,然后调用Process.Start(ProcessStartInfo),在Process.Start(ProcessStartInfo) 中系统会默认去检查WorkingDirectory,如果没有手动设置的话,则系统默认Environment.CurrentDirectory为ProcessStartInfo的WorkingDirectory,问题容易在这里发生。如果你用光盘启动一个程序(譬如Setup.exe),然后使用Process.Start启动另一个程序(譬如A.exe)然后退出Setup.exe,此时Environment.CurrentDirectory默认是光盘所在路径,那么如果再在A.exe放置一个linkbutton(目的是使用Process.Start开启一个新的进程),点击Linkbutton,如果在点击之前你弹出了光盘,那么问题就会出现,Process.Start(path)会去检查当前的Environment.CurrentDirectory(也就是ProcessStartInfo的WorkingDirectory),而光盘已经弹出,此时操作系统会提示你插入光盘。简单的说就是Process.Start(path)不能设置WorkingDirectory,是的WorkingDirectory变得不可控,容易导致代码不稳定。不知这个问题说清楚了没有,希望对有缘的人有所帮助。


文章来源:http://ejimgao.blog.163.com/blog/static/42030016200782703154796
posted @ 2007-09-27 00:32  Jim Gao  阅读(3114)  评论(0编辑  收藏  举报