如何保持流程的开放

本文关键字:何保持 | 更新日期: 2023-09-27 18:11:05

我在ASP中有一个web应用程序。. net/c#(使用MVS),我希望能够在客户端启动一些程序(这应该是安全的,因为它只用于内部网使用),并保持这些程序打开,以便通过web应用程序给他们一些命令输入。

例如,我想打开"cmd.exe"客户端,然后能够发送多个命令一个接一个(与我的web表单的一些按钮同步)的过程。

我该怎么做?我读过很多关于使用一个Javascript块与ActiveX对象,或在c#与System.Diagnostics.Process,但我相当坚持如何进行。

如何保持流程的开放

 function RunEXE()
 {
     var oShell = new ActiveXObject("WScript.Shell");
     var prog = "c:''WINDOWS''system32''notepad.exe";
     oShell.Run('"'+prog+'"',1);
 }

你也可以看看自定义协议处理程序,这就是Steam使用的。您只需有一个像myprotocol://dosomething/whatever这样的链接,它将使用给定的URL启动您的客户端应用程序。

基本上就是写一个注册表项:http://msdn.microsoft.com/en-us/library/ie/aa767914(v=vs.85).aspx

例如,注册一个名为alert的协议,您可以这样做:

HKEY_CLASSES_ROOT
   alert
      (Default) = "URL:Alert Protocol"
      URL Protocol = ""
      DefaultIcon
         (Default) = "alert.exe,1"
      shell
         open
            command
               (Default) = "C:'Program Files'Alert'alert.exe" "%1"

当您导航到以alert://开头的url时,这将导致command中的应用程序启动。

使用c#

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "CMD.EXE";
startInfo.Arguments = "list of args";
Process.Start(startInfo);

之后你可以通过

继续检查是否打开
Process[] processes = Process.GetProcesses();

Process[] chromes = Process.GetProcessesByName("chrome");

检查进程是否打开,然后传递参数给它