在网页前端调用exe程序并传参

最新折腾这个事儿,记录一下

首先,后台exe程序使用c#创建的控制台程序。代码简单,如下:

 static void Main(string[] args)
        {
            try
            {

                Console.WriteLine("参数个数:" + args.Length);
                Console.ReadLine();
                if (args.Length == 0)
                    return;
                Console.WriteLine("第一个参数:" + args[0]);
                Console.ReadLine();

                string filename = args[0].Substring(12, args[0].Length - 12);
                if (!File.Exists(filename))
                    return;

                
                Console.WriteLine("打印中...");
                FileStream fs = new FileStream(filename, FileMode.Open);
                byte[] nb = new byte[fs.Length];
                fs.Read(nb, 0, nb.Length);
                fs.Close();

                //删除文件
                File.Delete(filename);

                //string fileBase = Convert.ToBase64String(nb);

                
                //Console.ReadLine();
                //转换base64 为 pdf文件或流
                
                //Console.WriteLine("第一个参数:" + args[0].Substring(12, args[0].Length - 12));
                //Console.ReadLine();

                //byte[] base64 = Convert.FromBase64String(fileBase);

                Stream str = new MemoryStream(nb, 0, nb.Length);

                PdfDocument doc = new PdfDocument();
                //doc.LoadFromFile(args[0].Substring(12, args[0].Length - 12));
                doc.LoadFromStream(str);

                doc.PrintDocument.Print();
            }
            catch (Exception ex)
            {
                Console.WriteLine("出现错误:" + ex.Message);
                Console.ReadLine();
            }
            
            //Console.ReadLine();
        }

前端html页面上,分为两种调用方式:

第一种,使用注册表进行注册后,调用该注册表值,称为URL Protocol

步骤如下:

打开记事本,输入以下内容,其中QCEEQPLUS改为你自己的调用名称,程序路径改成你自己的:

Windows Registry Editor Version 5.00


[HKEY_CLASSES_ROOT\OCEEQPLUS]

@="OCEEQPLUS Protocol"

"URL Protocol"=""


[HKEY_CLASSES_ROOT\OCEEQPLUS\DefaultIcon]

@="F:\\test\\pdf-print.exe,1"


[HKEY_CLASSES_ROOT\OCEEQPLUS\shell]

@=""


[HKEY_CLASSES_ROOT\OCEEQPLUS\shell\open]

@=""

[HKEY_CLASSES_ROOT\OCEEQPLUS\shell\open\command]

@="\"F:\\test\\pdf-print.exe\" \"%1\""

将此文件存为reg,注册表文件,双击运行。得到成功提示。

然后在html上,如下代码调用

测试

注意,这里的QCEEQPLUS是你的注册名称,//后面是你的参数。调用后参数在main函数的strs里面。自己打印出来看
 

第二种HTML调用方式,WScript.Shell:

直接上js代码

function print() {
            var Shell = new ActiveXObject("WScript.Shell");
            try {
                //exe程序所在位置 以及要传的参数,以空格分开
                var print = "F:\\test\\pdf-print.exe F:\\test\\aaa.pdf";
                //print传递参数,1窗口显示方式,true是否等待执行完成
                var rs = Shell.run(print,1,true);
				alert(rs);//返回0,代表执行成功
            }
            catch (e) {
                alert("该可执行文件不存在");
            }
        }

同上,调用后参数在main函数的strs里面。自己打印出来看

你可能感兴趣的:(C#,前端)