当前位置: 首页 > 编程笔记 >

浅析C# 使用Process调用外部程序中所遇到的参数问题

屠瑞
2023-03-14
本文向大家介绍浅析C# 使用Process调用外部程序中所遇到的参数问题,包括了浅析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类调用外部exe程序,包括了C#使用Process类调用外部exe程序的使用技巧和注意事项,需要的朋友参考一下 在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法。在C#中,通过Process类来进行进程操作。 Process类在System.Diagnostics包中。 示例一 通过上述代码可以调用记事本程序,注意如果不是调用系统

  • 本文向大家介绍C#使用Process类调用外部程序分解,包括了C#使用Process类调用外部程序分解的使用技巧和注意事项,需要的朋友参考一下 在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能。它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程。 一、启动进程实例 Process.Start 方法,启动(或重用)此 Process 组件的 Sta

  • 本文向大家介绍浅析jQuery中使用$所引发的问题,包括了浅析jQuery中使用$所引发的问题的使用技巧和注意事项,需要的朋友参考一下 废话不多说,先看下面一段代码: prevObject:m.fn.init[1] 这是什么意思 selector:"li" __proto__:Object[0] 这是什么意思 console.log(lis.style);//undefined为什么是未定义 解决

  • 本文向大家介绍浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题,包括了浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题的使用技巧和注意事项,需要的朋友参考一下 今天用firefox调试一个用jquery里面的封装的方法与后台交互的时候,firefox死活不弹窗。 而之前用谷歌浏览器顺利通过。之后发现各自浏览器对浏览器默认值的处理是不一样的。总结: 如果返回的是json,应该

  • 本文向大家介绍浅谈在vue中使用mint-ui swipe遇到的问题,包括了浅谈在vue中使用mint-ui swipe遇到的问题的使用技巧和注意事项,需要的朋友参考一下 使用步骤: 1.安装:npm install mint-ui -S 2.引入组件 遇到的坑 1.轮播图是竖向的 忘记引入样式文件了import "mint-ui/lib/style.css" 2.轮播图不显示 需要在swipe所

  • 本文向大家介绍Java编程使用Runtime和Process类运行外部程序的方法,包括了Java编程使用Runtime和Process类运行外部程序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java编程使用Runtime和Process类运行外部程序的方法。分享给大家供大家参考,具体如下: 使用Runtime.getRuntime().exec()方法可以在java程序里运行外