zoukankan      html  css  js  c++  java
  • C#程序启动和关闭外部程序(转)

    【1】C#启动外部程序的几种常用方法汇总
    【2】C# 调用exe程序总结
    【3】MSDN文档:Process 类
    【4】C# 进程Process基本的操作说明
    【5】C#操作进程(Process)

    1 方法
    主要使用Process类。位于System.Diagnostics命名空间
    有两类方法
    (1)一种是定义一个Process实例,对这个实例的属性进行配置,然后启动它。类似与【2】中那样。如下:

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = AppConst.EngineFilePath; //exe程序文件地址
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardInput = false;
    p.StartInfo.RedirectStandardOutput = false;
    p.StartInfo.RedirectStandardError = false;
    p.StartInfo.CreateNoWindow = true; //不弹出窗口,改为后台运行
    p.StartInfo.Arguments = sb.ToString(); //参数 多个参数使用空格分开
    p.Start();
    p.WaitForExit();
    p.Close();


    (2)另一种是利用Process的系统直接启动一个,可能就没法设置好多的东西了,类似于【1】中那样。

    private string appName = "calc.exe";
    private void button1_Click(object sender, EventArgs e)
    {
    Process.Start(appName);
    MessageBox.Show(String.Format("外部程序 {0} 启动完成!", this.appName), this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Information);
    }


    2 启动等待等
    参见【1】中,可以等待等。

    3 其他注意
    (1)新进程的工作目录
    不设置时为调用者的工作目录,如果不同,通过WorkingDirectory设置。如下:

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.WorkingDirectory = "X:\spinning";

    (2)进程的退出
    有2种方法:kill和CloseMainWindow。
    后者适用于有窗口的。能释放干净相关资源。
    而前者适用于所有。强制的杀死,可能带来资源释放不干净等问题。

    Process proc = Process.Start(appName);
    ....
    proc.Kill();


    我遇到的一个问题:
    我使用上述方法,启动一个程序的时候,他同时启动了两个同样名称的进程。
    上面的代码只能杀死一个,为此,改进了一种方法,按照名称杀死进程,将两个全部干掉。前提是这两个进程同名。

    string processName = "XX": //名称一般为程序的名字,不带后缀名exe。的可通过 p.ProcessName查看
    System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName(processName);
    foreach (System.Diagnostics.Process p in ps)
    {
    if(!p.HasExited) //当没有退出时,杀死他
    p.Kill();
    }


    原文链接:https://blog.csdn.net/kevinshift/article/details/103836948/

  • 相关阅读:
    计算与软件工程 作业一
    C语言程序设计数组实验实验报告
    C语言程序设计第五次实验报告
    C语言程序设计第四次实验报告
    C语言程序设计第三次实验报告
    C程序设计实验报告第二次实验
    关于证书如何完成身份验证(SSL证书)
    openflow流表项中有关ip掩码的匹配的问题(控制器为ryu)
    解决sublime安装插件被墙失败的方法
    区块链技术与应用(二)之比特币中的数据结构
  • 原文地址:https://www.cnblogs.com/xihong2014/p/15222987.html
Copyright © 2011-2022 走看看