我正在尝试从我的网络应用程序以另一个用户身份运行批处理文件。由于某种原因,批处理文件挂起!我可以在任务管理器中看到“cmd.exe”正在运行,但它只是永远坐在那里,无法被杀死,并且批处理文件没有运行。这是我的代码:
SecureString password = new SecureString();
foreach (char c in "mypassword".ToCharArray())
password.AppendChar(c);
ProcessStartInfo psi = new ProcessStartInfo();
psi.WorkingDirectory = @"c:\build";
psi.FileName = Environment.SystemDirectory + @"\cmd.exe";
psi.Arguments = "/q /c build.cmd";
psi.UseShellExecute = false;
psi.UserName = "builder";
psi.Password = password;
Process.Start(psi);
如果您没有猜到,这个批处理文件会构建我的应用程序(与执行此命令的应用程序不同的应用程序)。
Process.Start(psi); line 应该立即返回,但批处理文件似乎挂起,没有执行。有任何想法吗?
编辑:有关批处理文件的内容,请参阅下面的答案。
- output.txt 永远不会被创建。
我添加了这些行:
psi.RedirectStandardOutput = true;
Process p = Process.Start(psi);
String outp = p.StandardOutput.ReadLine();
并在调试模式下逐步完成它们。代码挂在ReadLine()
. 我难住了!