在使用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. Android系列一、创建项目

    本文是在MAC下的Android Studio操作的. 一.Android入门 1.打开Android Studio,界面如下: 几个选项的意思: 创建一个新的项目 打开一个已经存在的项目 从版本管理 ...

  2. .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。

    本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Quick-Start EasyNetQ简介 Ea ...

  3. 基于MAC OS 操作系统安装、配置mysql

    $ sudo mv mysql-5.1.45-osx10.6-x86_64 /usr/local/mysql$ cd /usr/local$ sudo chown -R mysql:mysql mys ...

  4. LoadRunner 调用Dll完成加密解密

    LoadRunner里的函数比较少,没有MD5.Base64加密. 我们可以通过在C++里把一些加解密写成函数,供LR调用. DLL函数编写 C++里新建工程Class Library(此处是用VS2 ...

  5. 解决IIE8不支持媒体查询的方法

    最近在解决UI问题时碰到以下浏览器不兼容性问题(本人属于UI业余操作者,很多想法就很业余了): 问题:IE8及其以下低版本IE浏览器在缩小窗口时,UI没有按照相应的要求显示窗口缩小时对应的布局:其他浏 ...

  6. java多线程四种实现模板

    假设一个项目拥有三块独立代码块,需要执行,什么时候用多线程? 这些代码块某些时候需要同时运行,彼此独立,那么需要用到多线程操作更快... 这里把模板放在这里,需要用的时候寻找合适的来选用. 总体分为两 ...

  7. java字符串比较及小数浮点型的使用

    import java.text.DecimalFormat; /* * 小数类型的常量默认是double类型,声明float类型的常量需要使用F作为后缀. * * 关于equals()和==: 对于 ...

  8. InnoDB和Foreign KEY Constraints

    InnoDB表中中Foreign Key定义 1. InnoDB允许a foreign key引用一个索引列或者索引组列. 2. InnoDB现在并不支持用户定义的分区表有foreign keys,这 ...

  9. 这是一款可以查阅Github上的热门趋势的APP

    随时查阅当前Github上的热门趋势.使用Material Design设计风格,和流行的MVP+Retrofit+RxJava框架.数据抓取自https://github.com/trending ...

  10. POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割

    POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量. Stoer Wagner算法: (1)用类似prim算法的方法求"最大生成树" ...