如何保持流程的开放
本文关键字:何保持 | 更新日期: 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");
检查进程是否打开,然后传递参数给它