http://note.youdao.com/share/?id=cc76e50805fb3a39ebaaa6ceabdb99c5&type=note

今天在写程序的时候遇到一个问题,我需要在程序运行的过程中打开一个bat批处理文件来注册一些控件。

可是,遇到一个奇怪的情况就是:如果手动鼠标双击这个bat文件,控件可以注册成功;但在代码中通过System.Diagnostics.Process.Start(@"c:\xxx.bat")的方式打开bat文件,控件注册却总是没有效果,就像没有注册成功一样。

经过一番查找资料,终于知道了其中的原因,如下图,在原代码的基础上添加红框中的那一行代码即可。


鼠标双击打开exe程序和System.Diagnostics.Process.Start(@"c:\xxx.exe")打开exe程序有什么区别?_鼠标双击打开exe程序和System.D


以下是MSDN对WorkingDirectory属性的解释:

鼠标双击打开exe程序和System.Diagnostics.Process.Start(@"c:\xxx.exe")打开exe程序有什么区别?_鼠标双击打开exe程序和System.D_02



其实,如果被需要通过System.Diagnostics.Process.Start()打开的程序是一个独立的exe文件或者bat文件,WorkingDirectory属性可以不设置;但是如果被System.Diagnostics.Process.Start()打开的这个程序或者批处理文件还需要调用配置文件或者是其他的什么文件,则必须设置WorkingDirectory,将工作目录指向需要被调用的配置文件所在的目录。否则,这个通过System.Diagnostics.Process.Start()打开的程序将会找不到该配置文件。

由于我的程序中这个bat批处理文件需要调用外部的控件进行注册,所以,如果不设置WorkingDirectory,bat就找不到那些控件进行注册,所以总是注册失败。