带有换行符的C#命令行参数在C#中失败但在python中失败.需要使c#工作

Chr*_*han 5 c# python

环境:.NET 3.5 Visual Studio 2008 SP1,基于Win XP SP3,Python 2.7.企业形象,没有管理员权限.

在C#3.5中,我想将参数传递给命令行程序,并且此参数包含换行符.它适用于Python 2.7,但不适用于C#.

当body包含换行符时,c#会截断结果,但python会正确传递它.

Python代码

cmd = self.app_path + ' email -Subject "' + subject + '" -From "' + address_from + '" -To "' + address_to +'" -Body "' + body +'"'
cmd_result = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()
Run Code Online (Sandbox Code Playgroud)

C#代码:

string Command = "<path to executable>";                 
string arguments = "  email -From " + FromAddress + " -To " + ToAddress + " -Subject \"" + SubjectLine + "\" -Body \"" + emailBody + "\" ";
System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo(Command, arguments);
start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
start.CreateNoWindow = false;
start.UseShellExecute = true;
System.Diagnostics.Process process = System.Diagnostics.Process.Start(start);
Run Code Online (Sandbox Code Playgroud)

任何的想法?

更新:python示例中的body和c#示例中的emailBody包含相同的字符串,因为字符串以每种语言表示.

更新:注意到命令未在python代码中正确终止.我在第2行的末尾添加了+'"'.代码像以前一样运行.

此外,正如您所知,被调用的应用程序将body(emailBody)参数内容作为电子邮件正文发送.

Gia*_*971 2

抱歉,但我认为您调用的过程没有正确接受参数;它不涉及 C#,作为证明:

  • 创建一个新的 Windows 窗体应用程序
  • 确保主签名如下所示:

    static void Main(string[] args)
    
    Run Code Online (Sandbox Code Playgroud)
  • 确保主窗体(名为 Form1)的调用如下所示:

        if (args==null)
        {
            Application.Run(new Form1()); 
        }
        else
        {
            Application.Run(new Form1(args)); 
        }
    
    Run Code Online (Sandbox Code Playgroud)
  • 将文本框添加到表单,并将 multiline 属性设置为 true

  • 添加一个按钮到您的表单

  • 运行应用程序一次

  • 然后将其放入您的button1_Click函数的代码中(替换TheNameOfTheCurrentApp):

        string Command = "TheNameOfTheCurrentApp";                 
        string arguments = textBox1.Text;
        System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo(Command, arguments);
        start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
        start.CreateNoWindow = true;
        start.UseShellExecute = true;
        System.Diagnostics.Process process = System.Diagnostics.Process.Start(start);        
    
    Run Code Online (Sandbox Code Playgroud)
  • 将此构造函数添加到您的表单中:

    public Form1(string[] args)
    {
        InitializeComponent();
        textBox1.Text = string.Join(" ", args);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后运行您的应用程序,在文本框中插入多行并单击按钮。将出现相同的应用程序,其中文本框正确填充换行符