C#命令行参数含换行在C#中失败,但在Python中正常。如何让C#生效?
环境:.NET 3.5,使用Visual Studio 2008 SP1,运行在Win XP SP3上,Python 2.7。公司电脑,没有管理员权限。
在C# 3.5中,我想给一个命令行程序传递一个参数,这个参数里包含换行符。在Python 2.7中可以正常工作,但在C#中却不行。
当内容包含换行符时,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()
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);
有没有什么想法?
更新:Python示例中的body和C#示例中的emailBody包含相同的字符串,因为在每种语言中字符串的表示方式是一样的。
更新:注意到Python代码中的命令没有正确结束。我在第二行的末尾加了+ '"'。代码运行和之前一样。
另外,正如你所看到的,调用的应用程序会将body(emailBody)参数的内容作为邮件正文发送。
1 个回答
2
抱歉,我觉得是你调用的过程没有正确传递参数;这和C#没有关系,以下是证明:
- 创建一个新的Windows窗体应用程序
确保你的Main方法的格式看起来像这样:
static void Main(string[] args)
确保你调用主窗体(命名为Form1)的方式是这样的:
if (args==null) { Application.Run(new Form1()); } else { Application.Run(new Form1(args)); }
在你的窗体上添加一个文本框,并将多行属性设置为真
在你的窗体上添加一个按钮
运行一次应用程序
然后在你的button1_Click函数的代码中放入这个(替换当前应用的名称):
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);
在你的窗体中添加这个构造函数:
public Form1(string[] args) { InitializeComponent(); textBox1.Text = string.Join(" ", args); }
然后运行你的应用,往文本框中输入多行内容,点击按钮。相同的应用会出现,文本框会正确显示换行的内容