环境:.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)参数内容作为电子邮件正文发送.
抱歉,但我认为您调用的过程没有正确接受参数;它不涉及 C#,作为证明:
确保主签名如下所示:
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)然后运行您的应用程序,在文本框中插入多行并单击按钮。将出现相同的应用程序,其中文本框正确填充换行符