C# 使用Process调用外部程序中所遇到的参数问题
在使用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调用外部程序中所遇到的参数问题的更多相关文章
- C#Process调用外部程序
前言 使用C#调用外部程序,一种是通过Process类,一种是通过命令行,本文主要说一下使用C#中的Process类调用外部程序的方式. 过程: 1. 创建Process对象 2. 配置启动选项(输入 ...
- C#使用Process类调用外部程序(转)
在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能.它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程.一.启动进程实例 Process myProc ...
- PowerShell中调用外部程序和进程操作命令例子
学习PowerShell,我们不指望通过C#编程去搞定所有事情,我们应该记住cmd.exe或者说批处理给我们留下的宝贵财富——通过调用外部程序去解决问题.调用了外部程序,势必就要对进程进行管理,这就是 ...
- Delphi - 调用外部程序并阻塞到外部程序中
Delphi 调用外部程序并阻塞到外部程序中 背景说明: 前段时间开发一个数据转换的系统,业务逻辑中说明数据需要压缩成.tar.gz格式. 我在Windows系统下采用,先生成批处理文件,然后调用Wi ...
- JAVA中调用外部程序,并等待其退出(涉及Runtime和ProcessBuilder)
这段时间要写一个java调用外部程序的功能,踩了几个坑,这里分享一下. 首先用的是RunTime,调用代码如下: Process pro = Runtime.getRuntime().exec(&qu ...
- [C#]做服务使用Process启动外部程序没窗体
这几天会到一个需要,要时时侦测文件生成,并上传到Server上,侦测文件生成使用的FileSystemWatch.但是时时运行遇到了问题,程序可能会人为退出或者意外终止,使用一个进程监控程序的监程,也 ...
- Java魔法堂:调用外部程序
前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...
- MySql UDF 调用外部程序和系统命令
1.mysql利用mysqludf的一个mysql插件可以实现调用外部程序和系统命令 下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysq ...
- C#winform调用外部程序,等待外部程序执行完毕才执行下面代码
1.简单调用外部程序文件(exe文件,批处理等),只需下面一行代码即可 System.Diagnostics.Process.Start(“应用程序文件全路径”); 2.如果要等待调用外部程序执行完毕 ...
随机推荐
- HDU5873
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- KB奇遇记(5):奇葩的用人制度
8月份入职,公司不给我们正式任命,导致了我们开展工作困难重重,基本上很少有人会鸟你,做事仿佛名不正言不顺.哪怕你是未来信息部的老大也一样,网管们根本不买你的账.所以做ERP选型,做旧OA的选型以及加密 ...
- 《JAVASCRIPT高级程序设计》第二章
把javascript应用在网页中,需要涉及web的核心语言-html:如何让javascript既能与html共存,又不影响页面的显示效果,经过长时间的讨论.试错,最终的决定是为web增加统一的脚本 ...
- [转载]【虚拟化系列】VMware vSphere 5.1 虚拟机管理
转载自:http://mabofeng.blog.51cto.com/2661587/1019497 在上一博文中我们安装了强大的VMware vCenter管理中心,通过VMware vSphere ...
- 【iOS 录音转码MP3及转码BASE64上传】
iOS 录音转码MP3及转码BASE64上传 一,开始录音 NSLog(@"开始录音"); [self startRecord]; - (void)startRecord { // ...
- 理解Node.js(译文)
前言 总括 :这篇文章十分生动形象的的介绍了Node,满足了读者想去了解Node的需求.作者是Node的第一批贡献者之一,德国前端大神.译者觉得作者的比喻很适合初学者理解Node,特此翻译. 译者 : ...
- Python学习--19 网络编程
TCP编程 Client 创建一个基于TCP连接的Socket: # coding: utf-8 import socket # 创建一个TCP连接: s = socket.socket(socket ...
- Java语言跨平台原理
Java语言有一个很重要的原理叫:跨平台性. 在介绍Java语言的跨平台性之前首先要介绍一个很重要的概念:JVM: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一 ...
- Java安装
java特点:跨平台.简单.面向对像编译后解释再运行安装JDK 环境变量的配置:JAVA_HOME:JDK的根目录====C:\Program Files\Java\jdk1.7.0_25Path:J ...
- vim编译安装+lua模块
vim编译安装+lua模块 使用背景:代码自动补全插件,需要安装lua模块 安装准备,首先下载安装vim所依赖的其它安装包,ncurses,lua,readline,vim 源码下载,编译安装 ncu ...