URL ms paint 协议传递了错误的参数

URL Protocol for mspaint passes wrong paramaters

我正在尝试创建一个 URL 用于在 ms paint 中打开文件的协议。

我设置了注册表项,并将此按钮添加到我的页面:

<a href="mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg">Open in Paint</a>

但是当我点击 link 时,这个错误出现在 paint 的弹出窗口中:

---------------------------
Paint
---------------------------
C:\Program Files\Mozilla Firefox\mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg contains an invalid path.

我知道 cli 应该可以工作,因为手动输入命令提示符会按预期打开文件

$ mspaint C:\..my\..path

我的注册表如下所示:

[HKEY_CLASSES_ROOT\mspaint]
"URL Protocol"=""
@="URL: mspaint Protocol"
"DefaultIcon"="C:\WINDOWS\system32\mspaint.exe, 1"

[HKEY_CLASSES_ROOT\mspaint\shell]

[HKEY_CLASSES_ROOT\mspaint\shell\open]

[HKEY_CLASSES_ROOT\mspaint\shell\open\command]
@="\"C:\WINDOWS\system32\mspaint.exe\" \"%1\""

有谁知道为什么这不起作用?

仍然不确定为什么它会那样传递参数,但我最终只是编写了自己的协议处理程序:

namespace ProtocolHandler
{
    class Program
    {
        const string NOARGSMESSAGE = "No args received";

        const string MESSAGEBOXCAPTION = "Paint Protocol Handler";
        const string APPLICATIONPATH = "mspaint";
        const string URLPROTOCOL = "mspaint:";
        const string ERRORMESSAGE = "An error occured when trying to open the file";

        static void Main(string[] args)
        {
            try
            {
                if (args.Length < 1)
                {
                    MessageBox.Show(NOARGSMESSAGE, MESSAGEBOXCAPTION);
                }
                else
                {
                    var filePath = GetFilePath(args);
                    Process.Start(APPLICATIONPATH, filePath);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(MESSAGEBOXCAPTION, $"{ERRORMESSAGE} \n {e.Message}", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private static string GetFilePath(string[] args)
        {
            return args[0].Replace(URLPROTOCOL, string.Empty);
        }
    }
}

并将这些项添加到注册表

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\mspaint]
@="Url:Paint Protocol Handler"
"URL Protocol"=""
"UseOriginalUrlEncoding"=dword:00000001

[HKEY_CLASSES_ROOT\mspaint\DefaultIcon]
@="C:\Path\To\Paint Protocol Handler.exe,0"

[HKEY_CLASSES_ROOT\mspaint\shell]

[HKEY_CLASSES_ROOT\mspaint\shell\open]

[HKEY_CLASSES_ROOT\mspaint\shell\open\command]
@="C:\Path\To\Paint Protocol Handler.exe %1"

DefaultIcon 键似乎从来没有用过