通过C#运行多个高架Cmd提示

时间:2013-06-14 01:12:09

标签: c# windows-7 cmd admin scheduler

我基本上试图从C:\Windows\System32\Tasks的Tasks文件夹中复制所有文件并转移到使用C#选择的任何文件夹。到目前为止,我有这段代码:

String strCmdTxt = "/k %WINDIR%\\sysnative\\cmd.exe && xcopy\"C:\\Windows\\System32\\Tasks\\*.*\" \"C:\\Users\\Blah_Blah\\Documents\\Test\\\" /e /i /h";
System.Diagnostics.ProcessStartInfo i = new System.Diagnostics.ProcessStartInfo();//("cmd.exe", strCmdTxt);
System.Diagnostics.Process p = new System.Diagnostics.Process();
i.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
i.UseShellExecute =true;
i.FileName = "C:\\Windows\\System32\\cmd.exe";
i.Verb = "runas";
p.StartInfo = i;
try{
    p.Start();
    Console.WriteLine("The folders were copied");
    p.WaitForExit();
    p.Close();
} catch (Exception e) {
    Console.WriteLine("error");
}

所以问题是这个编译但是它没有产生我想要的东西。

我使用i.Verb来确保命令以管理员身份运行,以便它可以访问任务的计划文件。另外,我运行%WINDIR%\\sysnative\\cmd.exe,以便cmd可以访问System32文件夹,因为cmd会在SysWOW64中打开。

但由于某种原因,其余部分(xcopy \"C:\\Windows\\System32\\Tasks\\*.*\" \"C:\\Users\\Kapil_Gowru\\Documents\\Test\\\" /e /i /h)似乎没有运行。我已尝试使用StreamWriter执行此任务,因此我可以向cmd输出两个单独的命令,但这会使我无法以管理员身份运行cmd。

所以我猜这是另一种可能性来实现这个目标吗?如果您对我的问题有任何疑问,请在此处发帖,我会回复。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我没有看到你在启动它后将命令发送到进程的位置,尝试重定向StandardInput然后发送 strCmdTxt ,请参阅此article以获取示例使用StandardInput

虽然我不明白你为什么要尝试使用进程启动cmd提示来复制文件,但为什么不直接使用旧的File.Copy从C#直接执行文件复制,只需启动以管理员/提升的方式启动您的应用