通过Process.Start()调用时,为什么"cmd.exe/C命令"不会结束?

Pet*_*y B 7 c# cmd process

我正在尝试从ASP.Net Web应用程序通过命令提示符运行命令.我可以看到进程在Web服务器上的任务管理器中启动,但是进程只是位于那里并且从不退出也不运行我指定的命令.

            Process process = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo();

            startInfo.FileName = "cmd.exe";
            startInfo.Arguments = "/C " +command;
            startInfo.UserName = "myuser";
            startInfo.UseShellExecute = false;
            startInfo.RedirectStandardOutput = true;
            startInfo.Domain = "mydomain";
            startInfo.CreateNoWindow = true;

            String pass = "mypass";
            System.Security.SecureString secPass = new System.Security.SecureString();

            foreach (char c in pass.ToCharArray())
            {
                secPass.AppendChar(c);
            }
            secPass.MakeReadOnly();

            startInfo.Password = secPass;

            process.StartInfo = startInfo;
            process.Start();
            //output = process.StandardOutput.ReadToEnd();
            process.WaitForExit();
            process.Close();
Run Code Online (Sandbox Code Playgroud)

我已经尝试过,无论是否读取标准输出.

应用程序将process.WaitForExit();一直持续到我通过任务管理器终止进程.

Not*_*tMe 2

我认为我们需要了解您实际上正在尝试处理哪些命令,以便确定发生了什么。我们还需要知道服务器正在运行什么操作系统。

例如,我确实在您的评论中看到您在 Windows Server 2008(和 Windows 7)下尝试了“echo test > C:\test.txt”,根目录需要管理员权限才能创建文件。如果这是在 IIS 下执行,我的猜测是您的 IIS 用户不是管理员,并且您会遇到安全异常。

此外,由于 UAC,许多命令可能需要提升权限。我不太记得了,但我猜测如果这些命令被 UAC 捕获,那么该进程正在等待 UAC 确认...我相信无法通过命令行提供。

如果您登录机器​​并直接执行,则不会出现此类问题...除非您使用工作进程用户帐户登录。

因此,您需要做的第一件事就是弄清楚您正在尝试运行什么,并查看正在执行工作进程的用户是否可以执行这些操作。安全性是为了保护您,因此在向用户授予额外权限时要小心。

它在一台机器上与另一台机器上工作的原因再次取决于这些机器正在运行的操作系统以及执行命令的用户的配置。

如果这确实是一个安全问题,正如我怀疑的那样,那么您应该在 serverfault.com 上发布一个问题,询问在工作进程用户下执行各种命令需要哪些权限集。

您可以查看计算机事件日志以查看是否有关于该命令的任何警告或错误。有时,类似的事情会出现在那里,为您提供有关发生的情况的更多信息。