在使用Process.Start 调用外部程序时,除了程序的地址之外,是可以传递参数的,Process.Start 也有多个重载;

         //
// 摘要:
// 启动由包含进程启动信息(例如,要启动的进程的文件名)的参数指定的进程资源,并将该资源与新的 System.Diagnostics.Process
// 组件关联。
//
// 参数:
// startInfo:
// System.Diagnostics.ProcessStartInfo,包含用于启动进程的信息(包括文件名和任何命令行参数)。
//
// 返回结果:
// 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。
//
// 异常:
// System.InvalidOperationException:
// 在 startInfo 参数的 System.Diagnostics.ProcessStartInfo.FileName 属性中未指定任何文件名。-
// 或 - startInfo 参数的 System.Diagnostics.ProcessStartInfo.UseShellExecute 属性为
// true,而 System.Diagnostics.ProcessStartInfo.RedirectStandardInput、System.Diagnostics.ProcessStartInfo.RedirectStandardOutput
// 或 System.Diagnostics.ProcessStartInfo.RedirectStandardError 属性也为 true。- 或
// -startInfo 参数的 System.Diagnostics.ProcessStartInfo.UseShellExecute 属性为 true,而
// System.Diagnostics.ProcessStartInfo.UserName 属性不为 null 或空,或者 System.Diagnostics.ProcessStartInfo.Password
// 属性不为 null。
//
// System.ArgumentNullException:
// startInfo 参数为 null。
//
// System.ComponentModel.Win32Exception:
// 打开关联的文件时发生了错误。
//
// System.ObjectDisposedException:
// 该进程对象已被释放。
public static Process Start(ProcessStartInfo startInfo);
//
// 摘要:
// 通过指定文档或应用程序文件的名称来启动进程资源,并将资源与新的 System.Diagnostics.Process 组件关联。
//
// 参数:
// fileName:
// 要在进程中运行的文档或应用程序文件的名称。
//
// 返回结果:
// 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。
//
// 异常:
// System.ComponentModel.Win32Exception:
// 打开关联的文件时发生了错误。
//
// System.ObjectDisposedException:
// 该进程对象已被释放。
//
// System.IO.FileNotFoundException:
// PATH 环境变量有包含引号的字符串。
public static Process Start(string fileName);
//
// 摘要:
// 通过指定应用程序的名称和一组命令行参数来启动一个进程资源,并将该资源与新的 System.Diagnostics.Process 组件相关联。
//
// 参数:
// fileName:
// 要在该进程中运行的应用程序文件的名称。
//
// arguments:
// 启动该进程时传递的命令行参数。
//
// 返回结果:
// 与该进程关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。
//
// 异常:
// System.InvalidOperationException:
// fileName 或 arguments 参数为 null。
//
// System.ComponentModel.Win32Exception:
// 打开关联的文件时发生了错误。
//
// System.ObjectDisposedException:
// 该进程对象已被释放。
//
// System.IO.FileNotFoundException:
// PATH 环境变量有包含引号的字符串。
public static Process Start(string fileName, string arguments);
//
// 摘要:
// 通过指定应用程序的名称、用户名、密码和域来启动一个进程资源,并将该资源与新的 System.Diagnostics.Process 组件关联起来。
//
// 参数:
// fileName:
// 要在该进程中运行的应用程序文件的名称。
//
// userName:
// 启动进程时使用的用户名。
//
// password:
// 一个 System.Security.SecureString,它包含启动进程时要使用的密码。
//
// domain:
// 启动进程时要使用的域。
//
// 返回结果:
// 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。
//
// 异常:
// System.InvalidOperationException:
// 未指定文件名。
//
// System.ComponentModel.Win32Exception:
// fileName 不是可执行 (.exe) 文件。
//
// System.ComponentModel.Win32Exception:
// 打开关联的文件时发生了错误。
//
// System.ObjectDisposedException:
// 该进程对象已被释放。
public static Process Start(string fileName, string userName, SecureString password, string domain);
//
// 摘要:
// 通过指定应用程序的名称、一组命令行参数、用户名、密码和域来启动一个进程资源,并将该资源与新的 System.Diagnostics.Process
// 组件关联起来。
//
// 参数:
// fileName:
// 要在该进程中运行的应用程序文件的名称。
//
// arguments:
// 启动该进程时传递的命令行参数。
//
// userName:
// 启动进程时要使用的用户名。
//
// password:
// 一个 System.Security.SecureString,它包含启动进程时要使用的密码。
//
// domain:
// 启动进程时要使用的域。
//
// 返回结果:
// 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。
//
// 异常:
// System.InvalidOperationException:
// 未指定文件名。
//
// System.ComponentModel.Win32Exception:
// fileName 不是可执行 (.exe) 文件。
//
// System.ComponentModel.Win32Exception:
// 打开关联的文件时发生了错误。
//
// System.ObjectDisposedException:
// 该进程对象已被释放。
public static Process Start(string fileName, string arguments, string userName, SecureString password, string domain);

其中的arguments 参数, 是有个空格的问题的, 在外部程序接收参数的 (Winform) 是用过Main(string[] args) 。 其中args是数组 , 在StartInfo.Arguments中的参数的间隔是根据空格进行分断的。 所以如果在传递的参数中是空格的,就需要 在  参数前后追加 “\"”  即:

     string argument1 = "\"" + argv1 + "\"";
string argument2 = "\"" + argv2 + "\"";
Process process = new Process();
process.StartInfo.FileName = System.Environment.CurrentDirectory + "//test.exe";
process.StartInfo.Arguments = argument1 + " " + argument2;
process.StartInfo.UseShellExecute = true; ;
//启动
process.Start();

ok, 这样就能解决Process 传递参数的有空格的问题了。

C# 使用Process调用外部程序中所遇到的参数问题的更多相关文章

  1. C#Process调用外部程序

    前言 使用C#调用外部程序,一种是通过Process类,一种是通过命令行,本文主要说一下使用C#中的Process类调用外部程序的方式. 过程: 1. 创建Process对象 2. 配置启动选项(输入 ...

  2. C#使用Process类调用外部程序(转)

    在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能.它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程.一.启动进程实例 Process myProc ...

  3. PowerShell中调用外部程序和进程操作命令例子

    学习PowerShell,我们不指望通过C#编程去搞定所有事情,我们应该记住cmd.exe或者说批处理给我们留下的宝贵财富——通过调用外部程序去解决问题.调用了外部程序,势必就要对进程进行管理,这就是 ...

  4. Delphi - 调用外部程序并阻塞到外部程序中

    Delphi 调用外部程序并阻塞到外部程序中 背景说明: 前段时间开发一个数据转换的系统,业务逻辑中说明数据需要压缩成.tar.gz格式. 我在Windows系统下采用,先生成批处理文件,然后调用Wi ...

  5. JAVA中调用外部程序,并等待其退出(涉及Runtime和ProcessBuilder)

    这段时间要写一个java调用外部程序的功能,踩了几个坑,这里分享一下. 首先用的是RunTime,调用代码如下: Process pro = Runtime.getRuntime().exec(&qu ...

  6. [C#]做服务使用Process启动外部程序没窗体

    这几天会到一个需要,要时时侦测文件生成,并上传到Server上,侦测文件生成使用的FileSystemWatch.但是时时运行遇到了问题,程序可能会人为退出或者意外终止,使用一个进程监控程序的监程,也 ...

  7. Java魔法堂:调用外部程序

    前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...

  8. MySql UDF 调用外部程序和系统命令

    1.mysql利用mysqludf的一个mysql插件可以实现调用外部程序和系统命令 下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysq ...

  9. C#winform调用外部程序,等待外部程序执行完毕才执行下面代码

    1.简单调用外部程序文件(exe文件,批处理等),只需下面一行代码即可 System.Diagnostics.Process.Start(“应用程序文件全路径”); 2.如果要等待调用外部程序执行完毕 ...

随机推荐

  1. Codeforces Round #392 (Div. 2)-758D. Ability To Convert(贪心,细节题)

    D. Ability To Convert time limit per test 1 second Cmemory limit per test 256 megabytes input standa ...

  2. Sublime Text3自定义主题

    设置背景色和关键字颜色(Color Scheme 生成器): Color Scheme 生成器地址:http://tmtheme-editor.herokuapp.com/ 首先:点击General- ...

  3. linux gdb基本概念

    GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一般来说,G ...

  4. 开发mis系统的技术

    一.b/s架构 b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据,这个可以在eclipse中配置运行.浏览器则解释j ...

  5. AMD的cpu如何安装Mac OS

    AMD的cpu如何安装Mac OS       经过一个月的折腾,终于成功的安装了自己的Mac系统,并且能够成功的启动.在这里分享一下自己安装的经验.      为了安装方便,有不影响原来的系统的使用 ...

  6. Myeclipse 搭建Java Web 项目:Servlet 《二》

    上一节,我们使用myeclipse部署了web项目,但那部署的为静态的web项目,下面我们来学习编写动态的web项目,编写动态项目必须要用到的为:servlet. Servlet是由sun公司命名的, ...

  7. 关于 <textarea ></textarea >标签在苹果微信浏览器出现 内阴影

    解决方法:(去除浏览器默认的样式元素) textarea  { box-shadow:0px 0px 0px rgba(0,0,0,0); -webkit-appearance:none; }

  8. Kafka 0.10.1.1 特点

    1.Consumer优化:心跳线程可作为后台线程,提交offset,剥离出poll函数 问题:0.10新设计的consumer是单线程的,提交offset是在poll中.本次的poll调用,提交上次p ...

  9. xml中的SQL注入

    大家通常知道xml中大部分会导致外部实体注入,但是,xml也会出现SQL注入: 在xml中正常的sql语句写法有两种: 第一: <select id="selectById" ...

  10. Tcl/tk缩放Truetype字体时的精度问题

    最近有国内新客户抱怨我们产品显示的原理图太不专业了,在原理图上使用宋体GB2312设计好中文图表,经过几次缩放时,表格内的文字居然会跑到表格外边,更要命的是打印出来的文档也存在同样的问题. 我研究了一 ...