Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保持流程的开放性?_C#_Asp.net_Process - Fatal编程技术网

C# 如何保持流程的开放性?

C# 如何保持流程的开放性?,c#,asp.net,process,C#,Asp.net,Process,我在ASP.Net/C#(使用MVS)中有一个web应用程序,我希望能够在客户端启动一些程序(这应该是安全的,因为它只供内部网使用),并保持这些程序打开,以便通过web应用程序向它们提供一些命令输入 例如,我希望打开“cmd.exe”客户端,然后能够将多个命令一个接一个地发送到进程(与web表单的一些按钮同步) 我该怎么做?我读过很多关于在ActiveX对象中使用Javascript块,或者在C#withSystem.Diagnostics.Process中使用Javascript块的文章,但我

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

例如,我希望打开“cmd.exe”客户端,然后能够将多个命令一个接一个地发送到进程(与web表单的一些按钮同步)


我该怎么做?我读过很多关于在ActiveX对象中使用Javascript块,或者在C#with
System.Diagnostics.Process
中使用Javascript块的文章,但我对如何继续进行感到非常困惑。

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

 function RunEXE()
 {
     var oShell = new ActiveXObject("WScript.Shell");
     var prog = "c:\\WINDOWS\\system32\\notepad.exe";
     oShell.Run('"'+prog+'"',1);
 }
基本上就是写一个注册表项:

例如,要注册名为
警报
的协议,可以执行以下操作:

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"
这将导致当您使用c导航到以
alert://

开头的url时,启动
命令中的应用程序#

现在,你可以继续检查天气是否打开了

Process[] processes = Process.GetProcesses();


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

这只会在服务器端启动进程。OP希望在客户端上运行一个进程。可以回答,但要回答其他一些问题…忽略一个事实,即在用户凭据下尝试运行任意命令时没有“安全”选项。。。即使只使用客户端C#应用程序,您试图实现的目标(与任意应用程序通信,或者至少与独立CMD通信)也相对困难,而使用web页面,即使使用完全信任站点上的IE,也要困难得多。可能有更好的方法来实现你真正想要的(除非你写的是某种病毒)。我建议开始使用普通的C#应用程序,做你想做的事情,然后看看你是否想把它转换成网页。但是界面管理很费时,我也有同样的问题,为了让进程保持打开状态以便向程序发送输入命令,我认为您认为在浏览器中使用沙盒JavaScript比在本地运行Java更容易与现有本地进程通信的想法有点缺陷。祝你好运旁注:看起来您正在尝试重新发明telnet、远程PowerShell或其他一些远程shell工具/协议。。。考虑在这个问题中指定你的实际目标,所以可以提供更好的选择作为答案。谢谢…我将再次从地面开始。。。asp.net可能不是做我想做的事情的明智选择。请允许我问一下,您会用什么方法使这成为最简单的方法(事实上,这与您的工作有些关联,因为我想制作一个脚本,带有一个界面,以便在Microsoft控制台上轻松部署游戏^^)从编写满足您需要的本地程序开始—您的本地程序和浏览器中的页面之间的通信更容易实现(启动另一个将发布命令的副本,甚至是带有CORS支持的本地web服务器,以允许非完全信任的页面使用您的工具)。如果你想知道你在开发支持论坛上的案例帖子是否有什么特别的内容,你应该可以访问。谢谢你的回答,但我已经知道了。我的问题是,我想启动的程序打开了一个“类似shell”的界面(具有特定的环境)。因此,只要我执行process.start(…),程序就会退出(没有任何错误)。我想让它保持运行,以便在输入流中放入一组命令。@Raizyl但您可以这样做,这取决于您启动的客户端应用程序。如果你不想让它退出,那么不要让它退出,让它等待更多的指令。
Process[] processes = Process.GetProcesses();
Process[] chromes = Process.GetProcessesByName("chrome");