我用C#做了一个程序的界面,通过这个界面调用bat文件,调用语句Process p = System.Diagnostics.Process.Start("cmd.exe", "/c a.bat");现在调用已经没有问题了,我想问一下,怎么样能够把调用a.bat时执行的程序的过程隐藏起来,不在我的界面程序中显示cmd.exe那个运行界面,而直接反馈给我结果~不知道我说清楚了没有

解决方案 »

  1.   

    用 Process.Start (ProcessStartInfo)  这个重载函数指定ProcessStartInfo的WindowStyle成员为ProcessWindowStyle.Hidden
      

  2.   

    使用compiler.StartInfo.UseShellExecute = false;比如:
    Process compiler = new Process();
    compiler.StartInfo.FileName = "csc.exe";
    compiler.StartInfo.Arguments = "/r:System.dll /out:sample.exe stdstr.cs";
    compiler.StartInfo.UseShellExecute = false;
    compiler.StartInfo.RedirectStandardOutput = true;
    compiler.Start();    Console.WriteLine(compiler.StandardOutput.ReadToEnd());compiler.WaitForExit();
      

  3.   


    是不是如果我在Process p = System.Diagnostics.Process.Start("cmd.exe", "/c a.bat");下面写上p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;   这样的语句不会起到隐藏的作用,所以才在start()中做一个重载函数呢?
      

  4.   

    我昨天也遇到了这样的问题,p.StandarInfo.CreateNoWindow=true;即可
      

  5.   


    因为调用bat文件的同时,也在向它传递参数,问题中写的那个调用进程的语句把参数的字符串给省略掉了。如果定义了一个进程是 Process compiler = new Process();这种形式的话,那我的参数该怎么传递呢?
      

  6.   

    说说我的程序吧,我想调用.bat执行数据添加、删除、修改。
    把Sql保存到某个文件中,然后用cmd调用.bat,结果在网上查了一下这样比较麻烦,可以如下操作:
                  Process p = new Process();
                p.StartInfo.FileName = "cmd";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start();
                p.StandardInput.WriteLine("isql -Usa -P -Ssybase < 文件路径+文件名");
                p.StandardInput.WriteLine("exit");
    不知道对你是否有帮助!
      

  7.   

    Process p = new Process(); 
    p.StartInfo.CreateNoWindow = true;
    这样就能隐藏的
      

  8.   

     string arg = String.Format("-U {0} -P {1} -S{2} -d {3} -i {4}", user, pass, servername,databasename,filedir);
                Process pro = new Process();
                pro.StartInfo.FileName = "osql.exe";
                pro.StartInfo.Arguments = arg;
                pro.StartInfo.CreateNoWindow = true;
                pro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                pro.Start();
                pro.WaitForExit();
                pro.Close();
      

  9.   


    进程启动后再调用就无效了
    要这样:ProcessStartInfo psi = new ProcessStartInfo("C:\\a.bat");
    psi.WindowStyle = ProcessWindowStyle.Hidden;
    Process p = Process.Start(psi);
      

  10.   

    Process p = new Process();
    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    p = System.Diagnostics.Process.Start("cmd.exe", "/c a.bat  参数A  参数B);
                
    我把代码改成了这个样子,依然没有隐藏
    而且在p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;这个代码的位置也尝试了p.StartInfo.CreateNoWindow = true; 和p.StartInfo.UseShellExecute = false; 
    也没有实现了隐藏,不知道是不是因为我放置的位置不对呢?
      

  11.   

    OK,问题解决了,谢谢palmax的回答,你所提高的方法让我成功的解决了问题。也谢谢楼上各位热心的解答,结贴了~
      

  12.   


    你写错了,要这样:
    Process p = new Process();
    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    p.StartInfo.FileName = "C:\\a.bat";
    p.Start();