zoukankan      html  css  js  c++  java
  • [导入]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
  • 相关阅读:
    C++中智能指针的设计和使用
    [转]C++ 智能指针详解
    C++ const 常量和常指针
    深入理解C++中的mutable关键字
    C++ 静态常量
    BZOJ 1875: [SDOI2009]HH去散步
    BZOJ 1024: [SCOI2009]生日快乐
    BZOJ 1059: [ZJOI2007]矩阵游戏
    bzoj 1833: [ZJOI2010]count 数字计数
    LUOGU P2587 [ZJOI2008]泡泡堂
  • 原文地址:https://www.cnblogs.com/gaomin/p/1294123.html
Copyright © 2011-2022 走看看