C# ASP.NET进程。在任务管理器中启动后台工作,但在IIS8.5(Windows 8.1)中不在前台
我想在mvc 3应用程序中执行一个.EXE文件,当我们在浏览器上本地运行此项目时,它可以完美地工作。问题是,当我们发布此项目并将其托管在Windows 8.1上的IIS(8.5)服务器上时,单击“任务管理器”中的“已执行代码”按钮并处理“启动”,但应用程序未显示在前面。C# ASP.NET进程。在任务管理器中启动后台工作,但在IIS8.5(Windows 8.1)中不在前台,c#,asp.net-mvc,iis,process,iis-8.5,C#,Asp.net Mvc,Iis,Process,Iis 8.5,我想在mvc 3应用程序中执行一个.EXE文件,当我们在浏览器上本地运行此项目时,它可以完美地工作。问题是,当我们发布此项目并将其托管在Windows 8.1上的IIS(8.5)服务器上时,单击“任务管理器”中的“已执行代码”按钮并处理“启动”,但应用程序未显示在前面。 例如,在本例中,我们执行notepad.exe文件。 下面是我们在html中的代码,当用户单击该按钮时,我们会生成一个按钮,该按钮控制器方法称为运行代码。 当用户点击按钮时,这是执行的cod $("#Button11").cl
例如,在本例中,我们执行notepad.exe文件。
下面是我们在html中的代码,当用户单击该按钮时,我们会生成一个按钮,该按钮控制器方法称为运行代码。
当用户点击按钮时,这是执行的cod
$("#Button11").click(function (event) {
$.post("/Account/Start_Appl", {}, function (data) {
});
event.preventDefault();
});
帐户控制器内的startstart\u Appl方法具有以下代码行
public string Start_Appl()
{ string path="C:\\Windows\\System32\\notepad.exe";
ProcessStartInfo psi = new ProcessStartInfo();
psi.UseShellExecute = true;
psi.LoadUserProfile = true;
psi.WorkingDirectory = path;
psi.FileName = path;
Process.Start(psi);
return "ok";
}
我想用iis(8.5)执行.EXE文件来解决这个问题。
我在网上查过,但找不到解决这个问题的合适方法。我也会查看此链接,但不会提供任何帮助。
好的,首先,这是一件非常奇怪的事情——不管你的问题是什么,都会有更好的方法。也就是说,在这种情况下,我要做的是:
有很多其他东西可以用来代替队列中的数据库,但这样可以快速编写,易于调试/测试,并且可以轻松添加多个客户端和保存历史信息,并添加控制器方法来报告请求/完成的作业和进度。用于在iis(8.5)中执行外部.exe文件窗口8.1。我们使用了
调用应用程序的自定义URL协议技术检查此链接
我已将我的启动应用程序更改为
public string Start_Appl()
{
try
{
string myAppPath = "C:\\Windows\\System32\\notepad.exe";
RegistryKey key = Registry.ClassesRoot.OpenSubKey("myAppa"); //open myApp protocol's subkey
if (key == null) //if the protocol is not registered yet...we register it
{
key = Registry.ClassesRoot.CreateSubKey("myAppa");
key.SetValue(string.Empty, "URL: myApp Protocol");
key.SetValue("URL Protocol", string.Empty);
key = key.CreateSubKey(@"shell\open\command");
key.SetValue(string.Empty, myAppPath + " " + "%1");
}
key.Close();
}
catch (Exception e) {
return e.Message.ToString();
}
return "ok";
}
我们首先注册一个键,如果它还没有创建和设置值,然后我们在我的aspx页面上创建一个按钮,如下所示
<input type="submit" name="Launch" id="Launch" value="Launch Custom URL" onclick="LaunchURLScript()">
对于inside,我们首先调用控制器方法来创建URl协议(如果还不存在的话),最后我们打开一个新窗口来创建我的便笺簿exe文件。这样我们就解决了问题。我想你的问题是权限,但它可能是任何东西。为什么需要在服务器上打开记事本的网页?o_o似乎毫无意义在IIS中运行站点的进程不是面向用户的进程。因此你看不见它。我能想到的唯一方法是编写一个单独的应用程序(控制台应用程序、winforms、托盘应用程序等),作为本地用户运行并等待某种信号。你让你的网络应用发送这个信号,然后控制台应用启动程序。虽然我也必须指出,这似乎是一件奇怪的事情,没有太多的意义…一些事情需要考虑:-当多个用户同时按下按钮时,你会怎么做?当一个用户不小心按下按钮不止一次时,你会怎么做(除非你添加了很多代码,否则控制器不一定知道是同一个人)-如果应用程序决定需要用户输入,你会怎么做(例如,出现错误、磁盘空间不足、自动检测可用更新并询问用户是否需要更新等)..告诉我们您认为此“解决方案”将解决什么问题。有比此更好的方法。@GPW您能告诉我一些详细信息吗?我的web应用程序将如何向桌面应用程序发送信号以打开exe文件。注意,pad只是我想打开任何其他exe文件的一个示例。-@liam对于启动.exe文件的第二个应用程序,我们将该应用程序托管在iis服务器上或者在本地计算机上运行。只要它可以连接到数据库,你就可以在任何地方运行它。如果在运行IIS的服务器上运行,尽管你需要以登录用户的身份运行它,但是-因此,通过远程桌面或其他方式连接到服务器…我个人会在另一台PC上运行它。
function LaunchURLScript() {
$.post("/Account/Start_Appl", {}, function (data) {
if (data = "ok") {
alert("ok");
var url = "myAppa:"; window.open(url); self.focus();
}
});
}