js调用exe文件和C#调用exe文件

还是先说明一点,通过C#后台来调用exe仅仅适用于客户端的程序开发(因为后台调用exe,在部署到IIS服务器后,后台一直调用都是服务器上的exe),对于web端的还是采用js这种方式调用。

C#后台进程调用exe:

public void RealPlay()
        {
            string ip = Request["realpath"];
            string port = Request["realport"];
            string path = ip + " " + port;
            System.Diagnostics.Process.Start(@"C:\库文件\RealPlayAndPTZDemo.exe", path);
        }

path部分是传的参数,你也可以自己定义写,两个参数间用" "间隔开。

js调用exe方法类似,但是写法不同,同时因为是web开发的所以如果exe文件没有注册文件的话,需要自己写个注册文件

注册文件格式如下:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Browser]
@=""
"URL Protocol"=""

[HKEY_CLASSES_ROOT\Browser\DefaultIcon]
@="C:\\库文件\\RealPlayAndPTZDemo.exe"

[HKEY_CLASSES_ROOT\EmrBrowser\Shell]
@=""

[HKEY_CLASSES_ROOT\Browser\Shell\Open]
@=""

[HKEY_CLASSES_ROOT\Browser\Shell\Open\Command]
@="C:\\库文件\\RealPlayAndPTZDemo.exe %1"

用txt文档编写后修改后缀名为reg即可。

function sendReportsToPrinter() {
        //alert(realpath+realport);
        var link = $('<a href="Browser://'+' '+realpath+' '+realport +' '+'2'+'"></a>');
        $('body').append(link);
        link.get(0).click();
        link.remove();
    }

'<a href="Browser://'中 Browser://是第一个参数,后面要加参数就先添加' '之后再加参数,参数间用' '隔开,这样传过去后就是你要传递的参数。

注意:这样传递过去后参数都是string[],但是在Google浏览器上运行的时候,Google会跟其他浏览器不同的一点就是传过去的参数不是几个,不如你传递了三个参数,中间都有空格间隔,大多数浏览器都会传递过去三个参数,但是Google传递过去后是只有一个参数,Google传递时把空格转义成了%20,这样你传过去后就只有一个字符串了。

下面看下winform exe文件接收部分怎么写:

首先找到主程序的Program中的 Main函数修改

[STAThread]
        static void Main(string[] args)
        {
            //if (args.Length > 0)
            //{
            //    MessageBox.Show(":" + args[0] + args[1]);
            //}
            //else { MessageBox.Show("啥:"); }  //这是测试有没有参数传递过来
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new RealPlayAndPTZDemo(args));
        }

然后修改或添加对应窗体的构造函数

public RealPlayAndPTZDemo(string[] args)
        {
            InitializeComponent();
            if (args.Length>1)
            {
                ip_textBox.Text = args[1];
                port_textBox.Text = args[2];
                string flag = args[3].Split('/')[0];
            }
            else
            {
                ip_textBox.Text = args[0].Split('%')[1].Substring(2);
                port_textBox.Text = args[0].Split('%')[2].Substring(2);
                string flag = args[0].Split('%')[3].Substring(2).Split('/')[0];
            }
            this.Load += new EventHandler(RealPlayAndPTZDemo_Load);
        }

构造函数中主要是对传递过来的字符串或字符数组进行解析,这个需要自己根据特定情况自己改写。

猜你喜欢

转载自blog.csdn.net/qq_25086397/article/details/83782151