当前位置:  开发笔记 > 编程语言 > 正文

C#.Net:为什么我的Process.Start()挂起了?

如何解决《C#.Net:为什么我的Process.Start()挂起了?》经验,为你挑选了1个好方法。

我正试图从我的网络应用程序运行批处理文件,作为另一个用户.出于某种原因,批处理文件挂起!我可以看到"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); 行应该立即返回,但批处理文件似乎挂起,没有执行.有任何想法吗?

编辑:请参阅下面的答案,了解批处理文件的内容.

output.txt永远不会被创建.

我添加了这些行:

psi.RedirectStandardOutput = true;
Process p = Process.Start(psi);
String outp = p.StandardOutput.ReadLine();

并在调试模式下逐步完成它们.代码挂在了ReadLine().我很难过!



1> Josh Hinman..:

我相信我找到了答案.看来,微软凭借其无限的智慧,阻止了批处理文件被Windows Server 2003中的IIS执行.Brenden Tompkins在这里有一个解决方法:

http://codebetter.com/blogs/brendan.tompkins/archive/2004/05/13/13484.aspx

这对我不起作用,因为我的批处理文件使用IF和GOTO,但它肯定适用于简单的批处理文件.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有