浅析C# 使用Process调用外部程序中所遇到的参数问题
程序员文章站
2024-02-09 12:29:34
在使用process.start 调用外部程序时,除了程序的地址之外,是可以传递参数的,process.start 也有多个重载;
//
// 摘要:...
在使用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调用外部程序中所遇到的参数问题,希望对大家有所帮助
上一篇: SEO优化图片的七个技巧,值得一看