网页调用本地exe,C# 自动创建注册列表
一。实现思路。
先说一下需求,由于网页打印标签存在格式问题,所以想用本地程序去打印。
所需功能:
1.BS调用CS程序,并且可以传参
2. CS程序可以本地打印报表。
二。具体实现,目前实现启动EXE时,自动注册当前路径的注册列表,供网页端调用。代码如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Win32; namespace PrintPlug { public partial class Form1 : Form { // 注册列表Key名 private string DefaultName = "printPlug"; public Form1() { try { string str = this.GetType().Assembly.Location; if (JudgePrintPlug()) { DeletePrintPlug(); } AddPrintPlug(); // 启动打印窗体 InitializeComponent(); } catch (Exception) { throw; } } /// <summary> /// 判断打印插件列表 /// </summary> /// <returns></returns> private bool JudgePrintPlug() { RegistryKey key = Registry.ClassesRoot; RegistryKey software = key.OpenSubKey(DefaultName); key.Close(); if (software == null) { return false; } else { return true; } } /// <summary> /// 删除打印插件列表 /// </summary> /// <returns></returns> private void DeletePrintPlug() { RegistryKey key = Registry.ClassesRoot; key.DeleteSubKeyTree(DefaultName, true); key.Close(); } /// <summary> /// 添加注册打印插件列表 /// </summary> /// <returns></returns> private void AddPrintPlug() { // 当前EXE的存放地址 string path = this.GetType().Assembly.Location; string path2 = "\""+ path + "\" \"%1\""; RegistryKey key = Registry.ClassesRoot; // 创建printPlug节点,写入参数 CreateSubKey(key, DefaultName, "URL Protocol", "", true); // 创建printPlug - DefaultIcon节点,写入参数 RegistryKey software = key.OpenSubKey(DefaultName, true); CreateSubKey(software, "DefaultIcon", "", path, true); // 创建printPlug - shell节点 CreateSubKey(software, "shell"); // 创建printPlug - shell - open节点 RegistryKey shellKey = software.OpenSubKey("shell", true); CreateSubKey(shellKey, "open"); // 创建printPlug - shell - open - command节点 ,写入参数 RegistryKey openKey = shellKey.OpenSubKey("open", true); CreateSubKey(openKey, "command", "", path2, true); key.Close(); } /// <summary> /// 创建注册列表子类 /// </summary> private void CreateSubKey(RegistryKey key, string keyName, string writeName = "", object writeValue = null, bool flag = false) { key.CreateSubKey(keyName); if (flag) { RegistryKey writeKey = key.OpenSubKey(keyName, true); writeKey.SetValue(writeName, writeValue, RegistryValueKind.String); } } } }
三。后续开发。
由于项目保密,只能贴出自动创建网页调本地exe程序的代码片段。供大家参考
后续调研方向:
1。调用时传参。(这个超级简单,所以搜搜就有了)
2。exe具体实现功能。(这个各不相同。各凭本事把)
3。制作安装程序。(这样在浏览器访问不到exe时,提供下载链接,进行下载安装包,并进行安装,这样是为了确保安装路径固定。)
作者:一种风度
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.