您的位置:首页 > 其它

Url Protocol-从网页中打开应用程序(exe)-使用小记

2015-12-08 22:17 381 查看
项目有个需求,要从网页中打开一个桌面应用程序,故找到Url Protocol,上Code :

应用程序端:

/// <summary>
/// 注册表名称,注意不能有特殊符号,包括下划线
/// </summary>
private const string RegName = "WFA";
public void UpdateProtocol()
{
    try
    {
        if (Registry.ClassesRoot.OpenSubKey(RegName) != null)
        {
            RegistryKey rg = Registry.ClassesRoot.OpenSubKey(RegName+"\\shell\\open\\command", true);
            string 
                oldUrl = rg.GetValue("").ToString(),
                newUrl = string.Format("\"{0}\" \"%1\"", Application.ExecutablePath);

            if (!oldUrl.Equals(newUrl, StringComparison.CurrentCultureIgnoreCase))
            {
                rg.SetValue("", newUrl);
            }
        }
        else
        {
            RegistryKey first = Registry.ClassesRoot.CreateSubKey(RegName);
            first.SetValue("", RegName+" Protocol");
            first.SetValue("URL Protocol", "");
            RegistryKey
                shell = first.CreateSubKey("shell"),
                open = shell.CreateSubKey("open"),
                cmd = open.CreateSubKey("command");
            cmd.SetValue("", string.Format("\"{0}\" \"%1\"", Application.ExecutablePath));
        }
    }
    catch (Exception ex)
    {
        throw new Exception("修改注册表信息失败,请尝试:使用将程序加入安全软件白名单、使用管理员方式启动", ex);
    }
}
之所以会有修改,因为我的应用程序是绿色版的,所以其路径可能是不固定的,这段代码加在Login页面,每当程序打开都会更新注册表中对应的路径,避免无法打开程序;

但是这有个缺陷,就是要求每次移动后必须要打开一次程序才能确保注册表中的路径是正确的;

注:某些同学执行上面代码可能会提示权限不足,可参考:C#如何以管理员身份运行程序

网页端:

<a href="WFA://str">打开程序并传递字符串str作为参数</a>
网页端代码就简单了,一个A标签完事,但是后面的str可以做很多东西,如:免登陆(传递一个包含用户信息及过期时间之类的参数到应用程序端,应用程序端进行对应的解析,如果成功解析则直接通过登陆)

第一篇博客,希望自己持之以恒!

欢迎大家指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: