在控制台应用程序中编写 cmd 命令
Writing a cmd Command in a 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:\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 参数运行命令行并终止,所以你看不到结果(而且它是一个大 C),见她:http://ss64.com/nt/cmd.html
尝试使用“/K”。
我用你的命令完成了,我在另一个 window.
中看到了结果
ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/K ping PC -t");
Process.Start(startInfo);
您的流程应该 RedirectStandardInput = true
var p = new Process();
var startinfo = new ProcessStartInfo("cmd.exe", @"/C C:\temp\input.bat")
{
RedirectStandardInput = true,
UseShellExecute = false
};
p.StartInfo = startinfo;
p.Start();
StreamWriter stdInputWriter = p.StandardInput;
stdInputWriter.Write("y");
此程序启动 input.bat,然后将值 y
发送到它的标准输入。
为了完整性,input.bat
示例:
set /p input=text?:
echo %input%
我在 following post 中找到了解决方案。我不得不放弃我正在使用的大部分结构,但我现在可以使用下面列出的代码成功地 运行 记事本作为我想要的用户。
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 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 参数运行命令行并终止,所以你看不到结果(而且它是一个大 C),见她:http://ss64.com/nt/cmd.html
尝试使用“/K”。 我用你的命令完成了,我在另一个 window.
中看到了结果ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/K ping PC -t");
Process.Start(startInfo);
您的流程应该 RedirectStandardInput = true
var p = new Process();
var startinfo = new ProcessStartInfo("cmd.exe", @"/C C:\temp\input.bat")
{
RedirectStandardInput = true,
UseShellExecute = false
};
p.StartInfo = startinfo;
p.Start();
StreamWriter stdInputWriter = p.StandardInput;
stdInputWriter.Write("y");
此程序启动 input.bat,然后将值 y
发送到它的标准输入。
为了完整性,input.bat
示例:
set /p input=text?:
echo %input%
我在 following post 中找到了解决方案。我不得不放弃我正在使用的大部分结构,但我现在可以使用下面列出的代码成功地 运行 记事本作为我想要的用户。
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);