IIS 启动远程命令 - PsServices | PsExec

IIS 启动远程命令 - PsServices | PsExec

我开发了一个 ASP.NET C# 网页,它使用 PSSERVICES.exe 连接到远程计算机命令提示符并针对服务器执行一些命令。执行工作正常,直到我在 IIS 7.5 上部署该应用程序。该应用程序应该运行命令,然后获取输出并显示给用户。部署后,命令执行出现奇怪的行为,因为命令永远不会完成,似乎应用程序进入了无限循环,命令的结果永远不会返回。

字符串输出 = “”; 字符串错误 =“”; 字符串文件路径 = @“C:\”+ area.Name + ““ + 区域.服务器.名称 + ”" + action + ".txt"; UpdateXML_History update_History = new UpdateXML_History();

        Process p;
        p = new System.Diagnostics.Process();

        //Do not receive an event when the process exits.

        p.EnableRaisingEvents = false;

        /* Init Structure */

        CommandsLog _commandlog = new CommandsLog();
        _commandlog.StartDateTime = DateTime.Now;
        _commandlog.Command = action + " service " + service;
        _commandlog.Status = CommandStatus.NOTSTARTED;
        _commandlog.Output = "";            

        /*****************/


        //The "/C" Tells Windows to Run The Command then Terminate 

        ProcessStartInfo PSI = new ProcessStartInfo();
        PSI.FileName = @"psService.exe";
        PSI.RedirectStandardInput = true;
        PSI.RedirectStandardOutput = true;
        PSI.RedirectStandardError = true;
        PSI.UseShellExecute = false;
        PSI.CreateNoWindow = true;
        PSI.WindowStyle = ProcessWindowStyle.Hidden;
        PSI.Arguments = @"\\" + area.Server.Name + " -u " + DomainUser.userDomain + "\\" + DomainUser.userName + " -p " + DomainUser.password + " " + action + @" """ + service + " " + area.Name + @"""";
        p.StartInfo = PSI;
        p.Start();
        _commandlog.Status = CommandStatus.RUNNING;

        output = p.StandardOutput.ReadToEnd().ToString();
        error = p.StandardError.ReadToEnd().ToString();

        p.WaitForExit();


        if (p.HasExited)
        {

        }
        p.Close();
        _commandlog.Status = CommandStatus.COMPLETE;
        _commandlog.Output = output + "      " + error;
        _commandlog.EndDateTime = DateTime.Now;

        // Update xml file 
        update_History.UpdateXML(area, _commandlog);

        return output + "      " + error;

在调试模式下,执行会卡在这个方法中。当到达 p.WaitForExit(); 时,它会返回代码并无限执行命令。

此方法由名为 CommandController 的 webApi 控制器调用:

[AcceptVerbs("GET", "POST")]
        public Task<string> runCommand(CommandParamsViewModel commandParams)
        {
            return Task.Run(() =>
            {
                return ServicePsServicesUtil.LaunchService(...);
            });
        }

我已经切换到 Task 而不是简单字符串,但它们都不起作用。我不知道是否有办法让 IIS 7.5 使用 PsExec 或 PsService 执行远程命令?请帮帮我,我需要你的帮助。谢谢!

相关内容