可以使用以下内容在c#中运行命令行:
process = new Process();
process.StartInfo.FileName = command;
process.Start();
问题是命令字符串是否包含参数,例如:
C:\My Dir\MyFile.exe MyParam1 MyParam2
这不起作用,我不知道如何从这个字符串中提取参数并将其设置在process.Arguments
属性上?路径和文件名可能是其他内容,文件不必以exe
结尾。
我该如何解决这个问题?
答案 0 :(得分:6)
如果我理解正确,我会使用:
string command = @"C:\My Dir\MyFile.exe";
string args = "MyParam1 MyParam2";
Process process = new Process();
process.StartInfo.FileName = command;
process.StartInfo.Arguments = args;
process.Start();
如果你有一个需要解析的完整字符串,我会使用其他人提出的其他方法。如果要向流程添加参数,请使用上面的内容。
答案 1 :(得分:4)
这可能是最糟糕的解决方案,但它可能更安全:
string cmd = "C:\\My Dir\\MyFile.exe MyParam1 MyParam2";
System.IO.FileInfo fi = null;
StringBuilder file = new StringBuilder();
// look up until you find an existing file
foreach ( char c in cmd )
{
file.Append( c );
fi = new System.IO.FileInfo( file.ToString() );
if ( fi.Exists ) break;
}
cmd = cmd.Remove( 0, file.Length );
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo( fi.Name, cmd );
System.Diagnostics.Process.Start( psi );
答案 2 :(得分:3)
断言:如果文件名包含空格,则必须用双引号括起来。
在Windows中肯定是这种情况。否则规则会变得更具上下文性。
看看regex-matching-spaces-but-not-in-strings,我怀疑你可以使用正则表达式,
" +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"
使用Regex.Split()
将命令行转换为数组。第一部分应该是你的文件名。