当前位置: 首页 > news >正文

C#中调用exe文件示例

C#中调用exe文件示例

  • 0、功能描述
  • 1、代码

0、功能描述

        在C#中调用另一个exe文件;参数通过面板上的控件进行设置输出。面板如下,其中,"加载文件"用于选择要调用的exe文件;“加载图片”、“OdrWidth”、“OdrHeight”用于设置被调用的exe的三个传输参数。
在这里插入图片描述
        

1、代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace EpsonWarpAdjust
{
    public partial class Form1 : Form
    {
        OpenFileDialog Fp_Picture = new OpenFileDialog();
        OpenFileDialog Fp_ExeObj = new OpenFileDialog();

        public Form1()
        {
            InitializeComponent();
        }

        private void SelectPictureObj_Click(object sender, EventArgs e)       /*“浏览”的点击事件,用于选择作为参数的图片*/
        {
            Fp_Picture.Filter = "(jpg)|*.jpg";

            if (Fp_Picture.ShowDialog() == DialogResult.OK)
            {
                textOfPicturePath.Text = Fp_Picture.FileName.ToString();     /*在文件选择框内显示文件路径*/
            }
        }

        private void SelectExeObj_Click(object sender, EventArgs e)			/*“浏览”的点击事件,用于选择exe文件*/
        {
            Fp_ExeObj.Filter = "(exe)|*.exe";

            if (Fp_ExeObj.ShowDialog() == DialogResult.OK)
            {
                textOfExePath.Text = Fp_ExeObj.FileName.ToString();         /*在文件选择框内显示文件路径*/
            }
        }


        private void StartButton_Click(object sender, EventArgs e)			/*“开始”的点击事件,用于调用指定的exe文件*/
        {
            string[] arg = new string[3];
            arg[0] = Fp_Picture.FileName;                                   /*被调用的exe的参数*/   
            arg[1] = OdrWidth.Text;
            arg[2] = OdrHeight.Text;

            StartProcess(textOfExePath.Text, arg);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            textOfExePath.Text = System.Environment.CurrentDirectory + "\\offsets.exe";   /*初始值设为当前路径下的offset.exe*/
        }

        public bool StartProcess(string filename, string[] args)
        {
            try
            {
                string output;
                string parameters = "";

                int Index = args[0].LastIndexOf("\\");             /*获取路径名结束下标(不包含文件名)*/
                string PathOfBin = args[0].Substring(0, Index);    /*获取路径名*/
                txtReceive.Text = "文件生成路径:\n" + PathOfBin;

                foreach (string arg in args)
                {
                    parameters = parameters + '"' + arg + '"' + " ";/*将每个参数加上双引号,防止参数中带有空格带来的错误*/
                }
                parameters = parameters.Trim();

                Process myprocess = new Process();
                ProcessStartInfo startInfo = new ProcessStartInfo(filename,parameters);
                myprocess.StartInfo = startInfo;
                myprocess.StartInfo.UseShellExecute = false;        /*要重定向IO流,Process对象必须将UseShellExecute属性设置为false*/
                myprocess.StartInfo.RedirectStandardInput = true;   /*标准输入流的重定向,重定向至Process*/
                myprocess.StartInfo.RedirectStandardOutput = true;  /*标准输出流的重定向,*/
                myprocess.StartInfo.RedirectStandardError = true;
                myprocess.Start();
                myprocess.WaitForExit();
                output = myprocess.StandardOutput.ReadToEnd();
                
                if (output.Contains("SUCCESS"))                     /*判断exe的调用是否成功("SUCCESS"是被调用的exe的标准流输出(如"printf()中的内容"))*/
                {
                    /*弹出提示选择框;若用户选择是的话,进行路径跳转*/
                    DialogResult result = MessageBox.Show("转换完成,是否跳转到文件生成路径", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
                    if (result == DialogResult.OK)
                    {
                        Process.Start(PathOfBin);
                    }
                    else
                    {

                    }
                }
                else 
                {
                    MessageBox.Show("转换未完成\n"+"请检查OdrWidth与OdrHeigth的参数", "错误提示");
                }
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("启动应用程序时出错!原因:" + ex.Message);
            }
            return false;
        }
    }
}

相关文章:

  • J2ME程序开发全方位基础讲解汇总
  • CANoe工程通过控件改变报文信号值的两种方法
  • C#中对串口的操作
  • 看不见的含量
  • 诊断会话控制及保持/ECU复位(ISO14229系列之10/3E/11服务)
  • 就计算机学习问题与一名高二学生的邮件往来
  • ISO 15765-2(网络层服务)
  • 关于自动化诊断测试(CANoe.Diva的应用)
  • ISO14229之概述
  • 需求增加也要走保证金流程——CSDN外包实践(62)
  • DBC文件解析
  • Sun中国工程研究院院长王星耀:开源策略是为了挤掉微软
  • 使用DBCView编辑DBC文件过程(一)
  • 使用DBCView编辑DBC文件过程(二)
  • DBC和EXCEL相互转换
  • 10个最佳ES6特性 ES7与ES8的特性
  • Fastjson的基本使用方法大全
  • JavaScript HTML DOM
  • JavaScript的使用你知道几种?(上)
  • Koa2 之文件上传下载
  • nginx 配置多 域名 + 多 https
  • node-glob通配符
  • React as a UI Runtime(五、列表)
  • React组件设计模式(一)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 全栈开发——Linux
  • 如何设计一个比特币钱包服务
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用Gradle第一次构建Java程序
  • 试着探索高并发下的系统架构面貌
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 2017年360最后一道编程题
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 移动端高清、多屏适配方案
  • ​ArcGIS Pro 如何批量删除字段
  • ​第20课 在Android Native开发中加入新的C++类
  • ​你们这样子,耽误我的工作进度怎么办?
  • (1)(1.9) MSP (version 4.2)
  • (C语言)fread与fwrite详解
  • (pojstep1.3.1)1017(构造法模拟)
  • (七)理解angular中的module和injector,即依赖注入
  • (三)c52学习之旅-点亮LED灯
  • (译) 函数式 JS #1:简介
  • (转)原始图像数据和PDF中的图像数据
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Framework .NET Core与 .NET 的区别
  • .NET 发展历程
  • .NET 回调、接口回调、 委托
  • .Net 应用中使用dot trace进行性能诊断
  • .NET 指南:抽象化实现的基类
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...