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.如果要等待调用外部程序执行完毕 ...
随机推荐
- 对lua中_ENV表的理解(lua5.2版本以后)
当我拿到_ENV表的时候,会去想这个_ENV表是干什么用的? 首先看如下代码: print(_ENV) --0x1d005f0 print(_G) --0x1d005f0 ViewCode 看了上面的 ...
- Hadoop学习笔记-001-CentOS_6.5_64_连接外网设置
参考:http://blog.csdn.net/u010270403/article/details/51444677 虚拟机中共五个centos系统,每个系统有两个用户root和hadoop:cdh ...
- firefox浏览器相关的2个坑
今天遇到一个bug,找回密码的功能在google浏览器正常,在firefox浏览器不正常.在排查该bug的过程中遇到2个坑.先总结一下: 1.firefox浏览器无法debug,“脚本”面板提示:本页 ...
- 基于basys2用verilog设计多功能数字钟(重写)
话不多说先上图 前言 自从学习FPGA以来,唯一做过的完整系统就是基于basys2得多功能数字表.记得当时做的时候也没少头疼,最后用时间磨出来了一个不是很完整的小系统,当时还是产生了满 ...
- java实现解析二进制文件(字符串、图片)
1.需求说明,实现细节要求: 解析二进制文件 files\case10\binary,其中包含一个字符串和一张图片,数据文件格式为字符串数据长度(2字节)+字符串内容+图片数据长度(4字节)+图片数据 ...
- 虚拟机网络配置详解(NAT、桥接、Hostonly)
VirtualBox中有四种网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实它跟VMWare的网络连接方式都是一 ...
- matab plot指令和低通滤波器的响应图
一.plot额外的四个属性模板使用 代码 % 提示 disp ('该功能练习plot额外四个属性功能'); %初始化快捷式数组 figure(); x=:pi/:*pi; y=exp(*sin(x)) ...
- Baidu图表插件--Eharts使用(柱状图)
官网链接:http://echarts.baidu.com/index.html 官网的demo,api都很详细:我就分享下我的学习步骤 首先定义一个显示图标的区域: <div id=" ...
- Javascript 异步实现机制
Javascript 单线程指的是在一个浏览器进程中只存在一个 Javascript 执行线程,所以任务需要顺序排列等待执行,而不能像 Java 等多线程语言一样并发执行.但是这种单线程模型在处理耗时 ...
- Eclipse中debug调试java代码一直报Source not found的解决办法
今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...