C# 使用Process调用外部程序中所遇到的参数问题
在使用Process.Start 调用外部程序时,除了程序的地址之外,是可以传递参数的,Process.Start 也有多个重载;
1 // 2 // 摘要: 3 // 启动由包含进程启动信息(例如,要启动的进程的文件名)的参数指定的进程资源,并将该资源与新的 System.Diagnostics.Process 4 // 组件关联。 5 // 6 // 参数: 7 // startInfo: 8 // System.Diagnostics.ProcessStartInfo,包含用于启动进程的信息(包括文件名和任何命令行参数)。 9 // 10 // 返回结果: 11 // 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。 12 // 13 // 异常: 14 // System.InvalidOperationException: 15 // 在 startInfo 参数的 System.Diagnostics.ProcessStartInfo.FileName 属性中未指定任何文件名。- 16 // 或 - startInfo 参数的 System.Diagnostics.ProcessStartInfo.UseShellExecute 属性为 17 // true,而 System.Diagnostics.ProcessStartInfo.RedirectStandardInput、System.Diagnostics.ProcessStartInfo.RedirectStandardOutput 18 // 或 System.Diagnostics.ProcessStartInfo.RedirectStandardError 属性也为 true。- 或 19 // -startInfo 参数的 System.Diagnostics.ProcessStartInfo.UseShellExecute 属性为 true,而 20 // System.Diagnostics.ProcessStartInfo.UserName 属性不为 null 或空,或者 System.Diagnostics.ProcessStartInfo.Password 21 // 属性不为 null。 22 // 23 // System.ArgumentNullException: 24 // startInfo 参数为 null。 25 // 26 // System.ComponentModel.Win32Exception: 27 // 打开关联的文件时发生了错误。 28 // 29 // System.ObjectDisposedException: 30 // 该进程对象已被释放。 31 public static Process Start(ProcessStartInfo startInfo); 32 // 33 // 摘要: 34 // 通过指定文档或应用程序文件的名称来启动进程资源,并将资源与新的 System.Diagnostics.Process 组件关联。 35 // 36 // 参数: 37 // fileName: 38 // 要在进程中运行的文档或应用程序文件的名称。 39 // 40 // 返回结果: 41 // 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。 42 // 43 // 异常: 44 // System.ComponentModel.Win32Exception: 45 // 打开关联的文件时发生了错误。 46 // 47 // System.ObjectDisposedException: 48 // 该进程对象已被释放。 49 // 50 // System.IO.FileNotFoundException: 51 // PATH 环境变量有包含引号的字符串。 52 public static Process Start(string fileName); 53 // 54 // 摘要: 55 // 通过指定应用程序的名称和一组命令行参数来启动一个进程资源,并将该资源与新的 System.Diagnostics.Process 组件相关联。 56 // 57 // 参数: 58 // fileName: 59 // 要在该进程中运行的应用程序文件的名称。 60 // 61 // arguments: 62 // 启动该进程时传递的命令行参数。 63 // 64 // 返回结果: 65 // 与该进程关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。 66 // 67 // 异常: 68 // System.InvalidOperationException: 69 // fileName 或 arguments 参数为 null。 70 // 71 // System.ComponentModel.Win32Exception: 72 // 打开关联的文件时发生了错误。 73 // 74 // System.ObjectDisposedException: 75 // 该进程对象已被释放。 76 // 77 // System.IO.FileNotFoundException: 78 // PATH 环境变量有包含引号的字符串。 79 public static Process Start(string fileName, string arguments); 80 // 81 // 摘要: 82 // 通过指定应用程序的名称、用户名、密码和域来启动一个进程资源,并将该资源与新的 System.Diagnostics.Process 组件关联起来。 83 // 84 // 参数: 85 // fileName: 86 // 要在该进程中运行的应用程序文件的名称。 87 // 88 // userName: 89 // 启动进程时使用的用户名。 90 // 91 // password: 92 // 一个 System.Security.SecureString,它包含启动进程时要使用的密码。 93 // 94 // domain: 95 // 启动进程时要使用的域。 96 // 97 // 返回结果: 98 // 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。 99 // 100 // 异常: 101 // System.InvalidOperationException: 102 // 未指定文件名。 103 // 104 // System.ComponentModel.Win32Exception: 105 // fileName 不是可执行 (.exe) 文件。 106 // 107 // System.ComponentModel.Win32Exception: 108 // 打开关联的文件时发生了错误。 109 // 110 // System.ObjectDisposedException: 111 // 该进程对象已被释放。 112 public static Process Start(string fileName, string userName, SecureString password, string domain); 113 // 114 // 摘要: 115 // 通过指定应用程序的名称、一组命令行参数、用户名、密码和域来启动一个进程资源,并将该资源与新的 System.Diagnostics.Process 116 // 组件关联起来。 117 // 118 // 参数: 119 // fileName: 120 // 要在该进程中运行的应用程序文件的名称。 121 // 122 // arguments: 123 // 启动该进程时传递的命令行参数。 124 // 125 // userName: 126 // 启动进程时要使用的用户名。 127 // 128 // password: 129 // 一个 System.Security.SecureString,它包含启动进程时要使用的密码。 130 // 131 // domain: 132 // 启动进程时要使用的域。 133 // 134 // 返回结果: 135 // 与进程资源关联的新的 System.Diagnostics.Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 null。 136 // 137 // 异常: 138 // System.InvalidOperationException: 139 // 未指定文件名。 140 // 141 // System.ComponentModel.Win32Exception: 142 // fileName 不是可执行 (.exe) 文件。 143 // 144 // System.ComponentModel.Win32Exception: 145 // 打开关联的文件时发生了错误。 146 // 147 // System.ObjectDisposedException: 148 // 该进程对象已被释放。 149 public static Process Start(string fileName, string arguments, string userName, SecureString password, string domain);
View Code
其中的arguments 参数, 是有个空格的问题的, 在外部程序接收参数的 (Winform) 是用过Main(string[] args) 。 其中args是数组 , 在StartInfo.Arguments中的参数的间隔是根据空格进行分断的。 所以如果在传递的参数中是空格的,就需要 在 参数前后追加 “\"” 即:
1 string argument1 = "\"" + argv1 + "\""; 2 string argument2 = "\"" + argv2 + "\""; 3 Process process = new Process(); 4 process.StartInfo.FileName = System.Environment.CurrentDirectory + "//test.exe"; 5 process.StartInfo.Arguments = argument1 + " " + argument2; 6 process.StartInfo.UseShellExecute = true; ; 7 //启动 8 process.Start();
ok, 这样就能解决Process 传递参数的有空格的问题了。
转载于:https://www.cnblogs.com/chongde/p/6564048.html
C# 使用Process调用外部程序中所遇到的参数问题相关推荐
- python类定义以及调用_python中如何定义和调用类详解
类的方法的定义 1.def fun_name(self,...); Pass 2.其中的参数self代表类的实例,在调用方法时由系统自动提供 3.方法定义时必须指明self参数 类的方法的调用 与普通 ...
- QT中使用 WinExec API 参数不支持中文路径的解决办法
在QT中使用WinExec时,发现如果调用外部程序,如果路径或者参数含有中文路径,可能导致无法打开应用程序或者无法使用参数,解决办法,下面是简单的解决办法: QString strImagePath ...
- 在Word中调用外部程序两法
你有没有想过,在编辑Word文档的时候,直接从Word中调用外部程序呢?其实这并不难,下面笔者就以在Word中调用计算器程序为例,简述具体的操作方法. 一.利用宏命令 1.点击"工具→宏&q ...
- php+方法返回多个参数,PHP中调用外部程序,及其参数与返回值
用了一下午,终于弄明白了如何在PHP代码中调用外部程序. 在PHP中调用外部程序主要有两个函数,system和exec. system的原型为string system(string command ...
- java的外部引用_Java 调用外部程序
在Java中可以调用外部程序,这需要通过Process等类来实现. 创建进程 先来介绍一下Process的创建,我们需要使用ProcessBuilder类.如果需要命令行参数的话,则传入多个参数.比方 ...
- java魔法堂_Java魔法堂:调用外部程序
前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...
- Django项目调用外部程序soffice报错subprocess.CalledProcessError: Command 'soffice --headless --convert-to pdf
1.今天,在Linux上通过libreoffice调用外部程序把docx文档转换为pdf的时候,报了一个错: [Java framework] Error in function createSett ...
- C++ Builder创建和调用dll中的资源
程序开发中经常会用到一些图标.图片.光标.声音等,我们称它们为资源(Resource).当多个窗口用到同样的资源时,可以将这些公共的资源放到一个dll文件里调用,这样,由于定位资源比在磁盘中定位文件花 ...
- python调用外部程序 退出_2019-09-09 python调用外部程序
1.wget--用于下载:ffmpeg--多媒体处理(音频,视频):free 2.调用外部程序两种方法: os.system:(标准库中的非内置库)=Windows下的命令行 例如: import o ...
最新文章
- 自动驾驶技术公司Waymo完成新一轮25亿美元融资
- 揭秘高盛区块链报告:区块链技术在五大领域从理论走向实践 | 附报告下载
- 冒号课堂§2.4:并发范式
- Javascript中的对象和原型(一)(转载)
- netbeans7.4_NetBeans 7.1:创建自定义提示
- static函数与普通函数区别
- python query方法_Pandas dataframe.query方法语法
- maven00----maven学习说明
- C# 计时工具 Stopwatch
- 关于办公室打印机纸张方向的问题
- html5增加用户代码,HTML5 用户注册页面源代码
- 已知平面上两点坐标及半径,求过两点圆弧的圆心坐标
- TC Games无需安卓模拟器在电脑玩手机游戏穿越火线:枪战王者教程
- Windows内核面试题(持续更新,目前完成度30%约1.8万字)
- iOS开发iPhone竖屏icon尺寸与启动页尺寸汇总
- git报错以及解决方法
- windows10不能调节亮度的问题,始终显示0%或最暗
- 【KATA练习日记】关于std::set的使用
- Html+CSS浮动的广告条
- 未来谁才是移动互联网的入口?
热门文章
- 【网络信息安全】网络信息安全概述
- 深度学习入门读书笔记—全
- 【Linux】指令之用到什么学什么
- 票据的生命周期与人的灵魂
- eclipse中误删除的java文件 代码如何恢复
- 通向财务自由之路03_判断之偏好:掌握市场为何对多数人来说如此之难
- 南昌大学利用计算机作弊怎样处分,关于江西南昌大学医学院计算机中心教师组织全国计算机二级考试集体作弊的意见书...
- 这个工具,可视化分析10W数据后,找到了数据岗位月薪20K的秘诀
- python学习精华——成长篇
- c语言handler指针,typedef与指向函数的指针结合的妙用