从asp.net核心应用程序启动外部进程(.exe)

时间:2018-01-17 08:28:58

标签: iis asp.net-core asp.net-core-mvc asp.net-core-2.0 kestrel-http-server

我有以下

[HttpPost]
public IActionResult LaunchExternalProcess()
{
    Process.Start("C:\\Windows\\System32\\calc.exe");
    return Ok();

}

这在我的本地计算机上运行得非常好,但是当部署到IIS 10(Windows 2016)时,我没有错误,但它没有在服务器上启动计算。

我只想从我页面上的按钮调用外部.exe。

这是我正在使用的javascript,它也适用于我的本地但服务器上没有错误,它显示成功消息

$.ajax({
    url: "/Admin/LaunchExternalProcess",
    type: "POST",
    cache: false,

    success: function () {

        console.log("success");
    }
});

2 个答案:

答案 0 :(得分:2)

首先,启动这样的外部流程是一个非常糟糕的主意。所以,请不要在实际应用中执行此操作。你很可能会创造更多的问题和安全漏洞。有几种更强大的架构模式可用于处理请求管道之外的外部流程。

也就是说,问题是calc.exe无法在您的服务器上启动。您的方法并不知道这一点,因为您只是告诉它启动Process,您不会检查该进程处于什么状态。

var process = Process.Start("C:\\Windows\\System32\\calc.exe");
if (process == null) // failed to start
{
    return InternalServerError();
}
else // Started, wait for it to finish
{
    process.WaitForExit();
    return Ok();
}

答案 1 :(得分:0)

AzureWebJob 是其中一种实现,不是那么简单,但它可以完成工作