如何通过 c# 传递多个命令行参数
Posted
技术标签:
【中文标题】如何通过 c# 传递多个命令行参数【英文标题】:How can I pass more than one command line argument via c# 【发布时间】:2011-02-12 04:48:42 【问题描述】:我需要通过 c# 为一个名为 handle.exe 的进程传递多个命令行参数: http://www.google.com.mt/search?sourceid=chrome&ie=UTF-8&q=handle.exe
首先,我需要通过管理员权限运行可执行文件。这篇文章帮助我实现了这一点: programatically run cmd.exe as adminstrator in vista, c#
但接下来的问题是调用实际的行参数,例如“-p explore”
如何同时指定命令行参数,或者连续指定?
当前代码如下:
Process p = new Process();
ProcessStartInfo processStartInfo = new ProcessStartInfo("filePath");
processStartInfo.CreateNoWindow = true;
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardInput = true;
processStartInfo.Verb = "runas";
processStartInfo.Arguments = "/env /user:" + "Administrator" + " cmd";
p.StartInfo = processStartInfo;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(output);
谢谢
【问题讨论】:
main 函数通常不会从您运行应用程序时获取文本集合。如果是这样,您就不能解析一下吗? 问题是我正在添加它们,而不是检索它们 你的代码有什么问题? 我需要获取 -p explore 给我的数据,但是上面的代码没有返回它,因为我必须将初始参数设置为管理员权限。 【参考方案1】:您可以使用 UseShellExecute 命令运行该进程并传入用户名和密码
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.useshellexecute%28v=VS.100%29.aspx
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.username%28v=VS.100%29.aspx
虽然您将在某处存储用户名和密码。
【讨论】:
【参考方案2】:如果您尝试以提升的权限运行进程,可能有比调用 runas 更好的方法。
【讨论】:
【参考方案3】:我相信您正在寻找的答案就在 Runas command documentation 之外。
runas /user:user@domain.microsoft.com "notepad my_file.txt"
runas 命令的最后一个参数似乎是与任何参数一起运行的命令。关键是使用引号将实际命令可执行文件与其参数分组,这样这些值就不会被视为 runas 命令的单独参数,而是作为单独的命令发出。
因此,在您的示例中,您可能需要执行以下操作。
processStartInfo.Arguments = "/env /user:" + "Administrator" + " \"cmd -p explore\"";
【讨论】:
这个我试过了,我也试过加/k等cmd参数(继续执行),还是不行。以上是关于如何通过 c# 传递多个命令行参数的主要内容,如果未能解决你的问题,请参考以下文章