zoukankan      html  css  js  c++  java
  • C#调用Exe 及 有参数的

    在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法。在C#中,通过Process类来进行进程操作。 Process类在System.Diagnostics包中。

    示例一

    using System.Diagnostics;
    
    Process p = Process.Start("notepad.exe");
    p.WaitForExit();//关键,等待外部程序退出后才能往下执行

    通过上述代码可以调用记事本程序,注意如果不是调用系统程序,则需要输入全路径。

    示例二

    当需要调用cmd程序时,使用上述调用方法会弹出令人讨厌的黑窗。如果要消除,则需要进行更详细的设置。

    Process类的StartInfo属性包含了一些进程启动信息,其中比较重要的几个

    FileName                可执行程序文件名

    Arguments              程序参数,已字符串形式输入
    CreateNoWindow     是否不需要创建窗口
    UseShellExecute      是否需要系统shell调用程序

    通过上述几个参数可以让讨厌的黑屏消失

    System.Diagnostics.Process exep = new System.Diagnostics.Process();
    exep.StartInfo.FileName = binStr;
    exep.StartInfo.Arguments = cmdStr;
    exep.StartInfo.CreateNoWindow = true;
    exep.StartInfo.UseShellExecute = false;
    exep.Start();
    exep.WaitForExit();//关键,等待外部程序退出后才能往下执行

    或者

    System.Diagnostics.Process exep = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.FileName = binStr;
    startInfo.Arguments = cmdStr;
    startInfo.CreateNoWindow = true;
    startInfo.UseShellExecute = false;
    exep.Start(startInfo);
    exep.WaitForExit();//关键,等待外部程序退出后才能往下执行

    using   System.Diagnostics;  
       如果是dos  
       Process.Start("cmd.exe");  
       如果是其他文件  
       Process.Start("绝对路径+文件名.exe");  
       ------------------------------------  
       如何在c#中调用外部dos程序?  
       使用Process对象:      
       System.Diagnostics.Process     p=new     System.Diagnostics.Process();      
       p.StartInfo.FileName="arj.exe"     ;//需要启动的程序名      
       p.StartInfo.Arguments="-x     sourceFile.Arj     c:/temp";//启动参数      
       p.Start();//启动      
       if(p.HasExisted)//判断是否运行结束      
         p.kill();  
    -------------------------------------------------------------------------------------------------------------------------------------
    ///   <summary>  
       ///   启动其他的应用程序  
       ///   </summary>  
       ///   <param   name="file">应用程序名称</param>  
       ///   <param   name="workdirectory">应用程序工作目录</param>  
       ///   <param   name="args">命令行参数</param>  
       ///   <param   name="style">窗口风格</param>  
       public   static   bool   StartProcess(string   file,string   workdirectory,string   args,ProcessWindowStyle   style)  
       {  
       try  
       {  
       Process   myprocess   =   new   Process();  
       ProcessStartInfo   startInfo   =   new   ProcessStartInfo(file,args);  
       startInfo.WindowStyle   =   style;  
       startInfo.WorkingDirectory   =   workdirectory;  
       myprocess.StartInfo   =   startInfo;  
       myprocess.StartInfo.UseShellExecute   =   false;  
       myprocess.Start();  
       return   true;  
       }  
       catch(Exception   e0)  
       {  
       MessageBox.Show("启动应用程序时出错!原因:"   +   e0.Message);  
       }  
       return   false;  
       }  
       
       
       
       string   parms   =   ""   +   GlobalObject.GetInstance().UserID   +   "   "   +   GlobalObject.GetInstance().UserPassword;  
       if   (PublicMethods.StartProcess(Application.StartupPath   +   @"/uptool/uptool.exe",Application.StartupPath   +   "//UpTool",parms,ProcessWindowStyle.Normal))  
       {  
       Environment.Exit(0);  
       }  
    ----------------------------------------------------------------------------------------------------------------------
    Process.Start("IExplore.exe",   "http://community.csdn.net/Expert/topic/4021/4021327.xml?temp=.9493524");
    System.Diagnostics.ProcessStartInfo   startInfo   =   new   System.Diagnostics.ProcessStartInfo(   );  
       startInfo.FileName   =   "执行EXE的文件名";  
       startInfo.Arguments   =   "参数数组";  
       System.Diagnostics.Process.Start(   startInfo   );
    ----------------------------------------------------------------------------------------------------------------------------
    1.有好多时,我们需要调用外部的EXE程序,并且要等它运行完毕,我们才可以继续下面的动作,那我们怎样去实现了,请看以下代码.
             '怎样等待外部程序运行完毕.
             '从系统资料夹读入文件
             Dim sysFolder As String = _
                         Environment.GetFoldERPath(Environment.SpecialFolder.System)
             '创建一个新的进程结构
             Dim pInfo As New ProcessStartInfo()
             '设置其成员FileName为系统资料的Eula.txt
             pInfo.FileName = sysFolder & "/eula.txt"
             '运行该文件
             Dim p As Process = Process.Start(pInfo)
             '等待程序装载完成
             p.WaitForInputIdle()
             '等待进行程退出
             p.WaitForExit()
             '继续执行下面的代码
             MessageBox.Show("继续执行代码")


    2.我们想在5秒钟后,强行关闭它.而不是需要我手工关闭.
         '设置退出时间
         Dim timeOut As Integer = 5000
         Dim sysFolder As String = _
             Environment.GetFolderPath(Environment.SpecialFolder.System)
         Dim pInfo As New ProcessStartInfo()
         pInfo.FileName = sysFolder & "/eula.txt"
         Dim p As Process = Process.Start(pInfo)
         p.WaitForInputIdle()
         p.WaitForExit(timeOut)
         '检查是否在超时前已关闭了.
         If p.HasExited = False Then
             '进行程还在运行
             '看进程有没有回应
             If p.Responding Then
                 p.CloseMainWindow() '关闭窗口
             Else
                 p.Kill()   '强行中断
             End If
         End If
         MessageBox.Show("继续执行代码")

  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/weixing/p/2172118.html
Copyright © 2011-2022 走看看