添加到HKCU/Software/Classes后无法通过URI启动Windows程序

Kat*_*314 5 windows registry administrator uri-scheme

我正在尝试在Windows上设置一个测试应用程序,通过"myapp://website.com"样式的URI启动.大多数情况下,我基于这样的教程:

http://msdn.microsoft.com/en-us/library/ie/aa767914(v=vs.85).aspx

虽然我在HKEY_CLASSES_ROOT内部进行了初始设置,但新约束是在不需要管理员访问权限的情况下进行安装.因此,我删除了CLASSES_ROOT中的所有更改,并决定在HKEY_CURRENT_USER/Software/Classes/myapp中重试注册表添加,而不是使用HKEY_CURRENT_USER分支.

这似乎是由浏览器检测到的,并显示其确认对话框.但是,他们从未实际运行该应用程序.Internet Explorer提供了最有用的错误消息,对话框显示"无法为{uri}打开此帮助应用程序.此地址中指定的协议无效.请确保地址正确,然后重试.

我是否缺少非管理员设置的注册表部分?这是我的更改导出为.reg.(Dashes审查我的用户名).添加了EditFlags作为猜测,但没有它也没有用.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\myapp]
"URL Protocol"=""
@="URL:David Protocol"
"EditFlags"=dword:02000000

[HKEY_CURRENT_USER\Software\Classes\myapp\DefaultIcon]
@="C:\\Users\\------\\AppData\\Roaming\\-----s Stuffs\\URISchemeTest.exe,1"

[HKEY_CURRENT_USER\Software\Classes\myapp\shell]

[HKEY_CURRENT_USER\Software\Classes\myapp\shell\open]

[HKEY_CURRENT_USER\Software\Classes\myapp\shell\open\command]
@="\"C:\\Users\\-------\\AppData\\Roaming\\------s Stuffs\\URISchemeText.exe\" \"%1\""
Run Code Online (Sandbox Code Playgroud)

Kat*_*314 2

现在我已经完成了这项工作,我不能完全确定是什么导致了问题,但我至少可以说明我尝试做的不同事情,希望这对未来的研究人员有所帮助。

%-sign 路径声明可能不支持目录访问器。如果是,则可能需要以某种方式进行编码。在问题链接的文章中,它提到 Internet Explorer 如何解码某些 URL 参数,但其他浏览器可能不会。无论哪种方式,如果您将命令行指定为“%APPDATA%/MyProgram.exe”,那么从“C:/”开始可能更可靠,直到您可以解决该问题。

编辑:我刚刚注意到的另一件事,如果我的问题中的粘贴是正确的:我的注册表更改的工作版本将根的默认密钥设置为“URI:David Protocol”。注意“URI”,而不是“URL”。错误命名(很容易,因为另一个值被声明为“URL 协议”)可能会破坏所产生的效果。

虽然您可能不必指定 DefaultIcon,但您可能需要小心,不要引用无效的图标。为了安全起见,我将其设置为专门指向 .ico 文件,而不是“.exe,1”

正如其他一些评论者提到的,我认为 EditFlags 并不是真正必要的,并且可能不相关。

不过,对这个问题附近高票答案的一个警告反驳是:这个。作品。无需 UAC 访问。从我的研究一开始,我个人就会相信这样的解释:如果没有 UAC 管理提示等,则不允许这样做风险太大。但是,我花时间对其进行了测试,并且可以编写一个带有自动设置按钮的简单程序位于 HKCU/Software/Classes 下,并且可以通过浏览器访问。然后,我在从未参与过我的任何研究(干净环境)的开发人员的计算机上对其进行了测试,并且在没有任何管理提示的情况下,它运行良好。(显然,这个程序只有当前用户才能访问)

(为了方便阅读,提醒一下:HKCU = HKEY_CURRENT_USER.HKCR = HKEY_CLASSES_ROOT.HKLM = HKEY_LOCAL_MACHINE)

任何可以写入用户 HKCU 注册表的内容都已经具有非管理员二进制访问权限。此外,所有浏览器都会在打开程序之前显示有关启动该程序的警告消息(完全可以理解,因为它是本地代码)。其中一些甚至提供了您将启动的可执行文件的完整文件夹路径。

我知道教程说把钥匙放在 HKCR 里;已知这来自 HKLM/Software。然而,值得在这里阅读整个故事:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724475(v=vs.85).aspx

该密钥部分源自 HKCU 配置单元 - 事实上,用户的设置将覆盖本地计算机的设置。没有任何内容明确表明在 HKCR 内显示此类密钥时 HKLM 将覆盖 HKCU。