【问题标题】:Passing XML string as an argument to Process.Start将 XML 字符串作为参数传递给 Process.Start
【发布时间】:2012-09-20 13:14:02
【问题描述】:

我试图在调用 Process.Start 时使用包含 XML 的字符串作为参数,但是只有第一个空格之前的字符才能通过。例如,如果 Input.xml 包含以下文本 <?xml version="1.0" encoding="utf-8" ?>,那么我调用的所有应用程序接收到的是 "<?xml"。

以下是将其放入上下文的代码示例:

        XmlDocument xml = new XmlDocument();
        xml.Load("C:/Input.xml");
        Process proc = Process.Start("C:/Program.exe", xml.OuterXml);

有没有办法解决这个问题?

【问题讨论】:

  • 这是你的程序吗?如果是这样,请将其更改为接受文件名或从标准输入读取 - 将 XML 内容作为命令行参数是 weird。
  • 你说得对,Jon,但这是临时解决方法的一部分。
  • 那么你能改变程序吗?如果是这样,请使用其中一种替代方法 - 如果它本身很痛苦,那么临时解决方法是不好的。
  • 上周我放弃了尝试将 XML 作为参数传递并进行更改以从标准输入读取。乔恩,你能发表你的评论作为答案吗?或者也许这个问题应该被删除?

标签: c# cmd process.start


【解决方案1】:

试图将 XML 数据作为命令行参数传递基本上是一个问题的根源。你会在各处遇到转义问题,并且可能还会遇到命令行长度限制。

从标准输入或文件名读取。在这一点上,这很容易 - 文件通常比向标准输入提供数据更简单,但两者都是可行的。

【讨论】:

    【解决方案2】:
    Process proc = Process.Start("C:/Program.exe", String.Concat("\"", xml.OuterXml,"\"");
    

    ie 将参数用引号括起来。

    与命令行中的 xml 参数无关,由空格分隔。

    【讨论】:

    • 但是 XML 包含引号 ",这不是问题吗?
    • 几乎可以肯定,但是转义参数中的所有引号是另一个问题。不知道空格是命令行上的参数分隔符,首先需要理解。像其他人一样,我会为此使用文件。完全没有属性的 XML sn-p 是可能的,但这只是一个等待发生的设计缺陷。
    【解决方案3】:

    当传递参数时,应用标准规则,当字符串包含空格时,它被分成多个参数。

    你可以试试:

     Process proc = Process.Start("C:/Program.exe", "\"" + xml.OuterXml + "\"");
    

    但是您的 xml 也包含 " 字符,并且它再次中断。你可以做点什么,但是……这不值得。只需将文件名作为参数传递并在程序中加载 xml(如果可以修改的话)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多