LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

在网页上调起本机C#程序

freeflydom
2024年11月15日 8:47 本文热度 13

前言#

网页调起电脑程序是经常用到的场景,比如百度网盘下载,加入 QQ 群之类的

注册表操作#

在 Windows 上实现就是通过注册表,将 Scheme 和对应的程序添加进去。其他系统暂时没需要就还没研究,估计也是类似的。

需要配置一下 SchemePrefix ,本文例子中是 demo

在网页上使用 demo:// 开头的链接就可以唤起本机的程序了~

using System.Diagnostics;
using System.Web;
using Microsoft.Win32;
const string AppName = "DemoApp";
const string SchemePrefix = "demo";
// 初始化注册表
void InitReg() {
    if (!OperatingSystem.IsWindows()) return;
    var path1 = AppName;
    var path2 = $@"{path1}\shell\open\command";
    // 设置协议名称
    var key1 = Registry.ClassesRoot.OpenSubKey(path1, true);
    if (key1 == null) {
        key1 = Registry.ClassesRoot.CreateSubKey(path1);
    }
    key1.SetValue("URL Protocol", "");
    key1.SetValue(null, $"URL:{SchemePrefix}");
    var key2 = Registry.ClassesRoot.OpenSubKey(path2, true);
    if (key2 == null) {
        key2 = Registry.ClassesRoot.CreateSubKey(path2);
    }
    var exePath = Environment.ProcessPath ?? "";
    key2.SetValue(null, $"\"{exePath}\" \"%1\"");
}

参数解析#

因为是随手写的小工具,我也没有用命令行解析的库

如果用第三方库代码会更优雅

这里就做了两个命令,一个 install 另一个 open

手动执行 install 会在注册表里添加配置,之后这个程序文件就不要移动了,后续网页调起需要执行这个程序。

open 命令是网页调起时执行的,注意命令参数里的字符需要 URL 转义。

string action = "", value = "";
string[] cmdArgs = Environment.GetCommandLineArgs();
if (cmdArgs.Length > 1) {
    var arg = cmdArgs[1];
    Console.WriteLine($"cmd args: {arg}");
    if (arg.StartsWith($"{SchemePrefix}://")) {
        arg = arg.Replace($"{SchemePrefix}://", "");
    }
    if (arg.EndsWith("/")) {
        arg = arg.Substring(0, arg.Length - 1);
    }
    var split = arg.Split("//");
    action = split[0];
    value = split.Length > 1 ? split[1] : "";
    Console.WriteLine($"action: {action}, value: {value}");
}
switch (action) {
    case "install":
        Console.WriteLine("init reg...");
        InitReg();
        Console.WriteLine("init reg finished.");
        break;
    case "open":
        var path = HttpUtility.UrlDecode(value);
        Console.WriteLine($"open file/dir: {path}");
        if (OperatingSystem.IsWindows())
            Process.Start($"C:\\Windows\\explorer.exe", path);
        if (OperatingSystem.IsLinux())
            Process.Start("xdg-open", path);
        break;
    default:
        Console.WriteLine("不知道做啥~");
        break;
}

参考资料#

转自https://www.cnblogs.com/deali/p/18546412


该文章在 2024/11/15 8:49:14 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved