C# 在控制台应用程序中编写cmd命令

C# 在控制台应用程序中编写cmd命令,c#,cmd,console-application,C#,Cmd,Console Application,我正在尝试编写一个C#控制台应用程序,它将通过cmd启动runas.exe,然后作为该用户运行另一个应用程序。我采纳了下面列出的建议之一(并添加了一点),因为它似乎是最有希望的 Process cmd = new Process(); ProcessStartInfo startinfo = new ProcessStartInfo("cmd.exe", @"/K C:\Windows\System32\runas.exe /noprofile /user:DOMAIN\USER'c:\wind

我正在尝试编写一个C#控制台应用程序,它将通过cmd启动
runas.exe
,然后作为该用户运行另一个应用程序。我采纳了下面列出的建议之一(并添加了一点),因为它似乎是最有希望的

Process cmd = new Process();
ProcessStartInfo startinfo = new ProcessStartInfo("cmd.exe", @"/K C:\Windows\System32\runas.exe /noprofile /user:DOMAIN\USER'c:\windows\system32\notepad.exe\'")
{
    RedirectStandardInput = true,
    UseShellExecute = false
};
cmd.StartInfo = startinfo;
cmd.Start();
StreamWriter stdInputWriter = cmd.StandardInput;
stdInputWriter.Write("PASSWORD");
cmd.WaitForExit();
当我启动应用程序时,它会在命令本身之前请求密码,从而导致
runas.exe出现错误


我很确定是
UseShellExecute=false
导致了错误,但是没有它,
StreamWriter
就不能工作,所以我不知道该怎么办。

参数运行逗号并终止,所以你看不到结果(这是一个大的c),见她:

尝试使用“/K”。 我是用你的命令做的,我在另一个窗口中看到结果

ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/K ping PC -t");
Process.Start(startInfo);
您的流程应该具有=true

此程序启动input.bat,然后将值
y
发送到其标准输入

为完整起见,
input.bat
示例:

set /p input=text?: 
echo %input%
我找到了解决办法。我不得不放弃大部分我正在使用的结构,但现在我可以使用下面列出的代码成功地以我想要的用户身份运行notepad

var pass = new SecureString();
pass.AppendChar('p');
pass.AppendChar('a');
pass.AppendChar('s');
pass.AppendChar('s');
pass.AppendChar('w');
pass.AppendChar('o');
pass.AppendChar('r');
pass.AppendChar('d');
var runFileAsUser = new ProcessStartInfo
{
    FileName = "notepad",
    UserName = "username",
    Domain = "domain",
    Password = pass,
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true
};
Process.Start(runFileAsUser);

好东西!这让我可以运行命令并查看它们,现在我必须弄清楚如何将C#变量输入到cmd@BlueBarren谢谢,您甚至可以将答案标记为解决方案:)您是否尝试过:stdInputWriter.WriteLine(“密码”)?也许你只是没有确认输入?@JakubSzułakiewicz,但是我仍然需要声明streamwriter,如果我没有使用
进程。StandardInput
那么我应该用什么来声明它呢?我正在使用
“/K”
,这样我就可以看到cmd窗口在做什么,但它仍然在关闭,为什么?它以前工作过。无论哪种方式,我都不确定您的方法是否有效,因为我尝试的命令是启动记事本,但它没有启动。同时使用/K和/C运行记事本在我的环境中工作,记事本在路径中吗?路径是'c:\windows\system32\notepad.exe',我知道它可以工作,因为当我尝试@marksimkin的答案时,cmd命令工作正常
var pass = new SecureString();
pass.AppendChar('p');
pass.AppendChar('a');
pass.AppendChar('s');
pass.AppendChar('s');
pass.AppendChar('w');
pass.AppendChar('o');
pass.AppendChar('r');
pass.AppendChar('d');
var runFileAsUser = new ProcessStartInfo
{
    FileName = "notepad",
    UserName = "username",
    Domain = "domain",
    Password = pass,
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true
};
Process.Start(runFileAsUser);