我用C#程序调用一个批处理文件,功能是注册一个服务,程序中用一个按钮来调用,这个批处理文件肯定执行了(为什么说肯定执行了,我将批处理文件里边改成PING命令了,是可以执行的。),但是服务没有注册进去,手动执行这个批处理文件是没问题的。我想肯定是路径问题,程序调用这个批处理文件时,默认的路径应该不是程序所在路径。如:我的程序在C:\test下,怎样让程序调用这个批处理文件时,DOS默认路径是进到C:\test下执行批处理文件。请高手指教,谢谢

解决方案 »

  1.   

    这太简单了            System.Diagnostics.Process ps = new System.Diagnostics.Process();
                ps.StartInfo.FileName = "1.bat";
                ps.StartInfo.WorkingDirectory = "C:\\test";
                ps.Start();
      

  2.   


                string batFile = @"C:\test\1.bat";
                System.Diagnostics.Process ps = new System.Diagnostics.Process();
                ps.StartInfo.FileName = batFile;
                ps.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(batFile);
                ps.Start();
      

  3.   

    谢谢,我知道在哪设置了,那我怎么能让这个BAT执行完毕以后停留在DOS窗口呢,我直接读的ps.StartInfo.WorkingDirectory = Application.StartupPath.感觉执行有错误
      

  4.   

                string batFile = @"C:\test\1.bat";
                System.Diagnostics.Process ps = new System.Diagnostics.Process();
                ps.StartInfo.FileName = "cmd";
                ps.StartInfo.Arguments = "/k " + batFile;
                ps.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(batFile);
                ps.Start();
      

  5.   

    ps.StartInfo.FileName = "cmd";
    为什么是“cmd”
      

  6.   

    bat文件都是用cmd来执行的啊/k 参数就是告诉cmd执行完毕后 保留窗口
      

  7.   

    我的问题解决了,谢谢,但是我感觉ps.StartInfo.FileName不应该是BAT的文件名吗
      

  8.   

    +2[align=center]*****************************************
    本内容使用CSDN小秘书回复
    每天回帖即可得10分可用分!
    *****************************************[/align]
      

  9.   

    其实你就直接把filename设成bat,系统也会调用cmd来执行他的,而且还是默认执行完了就退出
    就像你双击doc文件,系统会调用word来打开doc文件一样,只是一种文件关联
      

  10.   

    其实你可以在bat文件内部,添加pause,这样执行后就会停留在DOS窗口