在Windows 10中将应用程序注册到URI方案

时间:2015-09-21 11:57:31

标签: c# asp.net uri windows-10

几年前,我在ASP.net网络应用程序中开发了一个Silverlight组件,该组件使用PInvoke访问客户端计算机上的USB(串行COM端口),以允许向某些扫描仪硬件发送命令。

随着Windows 10的出现以及Silverlight不可避免的消亡,我正在寻找在客户端PC上访问硬件的替代方案(这是我们对实现有很多控制权的所有Intranet Web应用程序)

目前我正在考虑按照此页面将应用程序注册到URI方案(简易解决方案):https://msdn.microsoft.com/library/aa767914(v=vs.85).aspx 或者也许Javascript navigator.msLaunchUri(在Windows 7中似乎不支持,我们仍然需要支持) 请参阅:https://connect.microsoft.com/IE/feedback/details/864863/documented-api-function-navigator-mslaunchuri-not-present-in-windows-7

将应用程序注册到URI方案在Windows 7/8 / 8.1中运行良好但在Windows 10中似乎已经改变 - 有谁知道如何实现这一点(通过C#代码,注册表,某些东西)来允许这个在Windows 10中工作

2 个答案:

答案 0 :(得分:2)

我最近也想这样做-我找到了答案,所以我将其发布在这里以供将来参考,但我在C#的任何地方都找不到有效的示例。

首先,您的应用需要requireAdministrator权限。为此,请在解决方案资源管理器中右键单击项目,然后单击Add New Item,然后选择General,最后选择Application Manifest文件(如果还没有文件)。在其中,将requestedExecutionLevel更改为requireAdministrator。保存。

这是您第一次执行此操作,您可能需要重新启动Visual Studio,因为它可能不是在管理员权限下运行的。

好的,所以我希望我的应用在启动时创建注册表项,因此在表单的构造函数中,我输入了以下代码,该代码为名为“ oggsplit”的程序创建了URL协议foo:// .exe”(我恰好在C:根目录中,所以我只是用它来进行测试)

RegistryKey key;
key = Registry.ClassesRoot.CreateSubKey("foo");
key.SetValue("", "URL: Foo Protocol");
key.SetValue("URL Protocol","");

key = key.CreateSubKey("shell");
key = key.CreateSubKey("open");
key = key.CreateSubKey("command");
key.SetValue("", "C:\\oggsplit.exe");

配置完成后,保存并运行该程序。您将不会获得任何反馈,只要您看不到任何错误,它就应该可以正常工作。现在,打开浏览器(无需重新启动或执行任何操作)并转到地址foo://hello。这是我在Google Chrome浏览器中的样子: enter image description here

然后它将询问您是否要从浏览器打开应用程序,单击“确定”。嗨,Presto,您的应用程序从浏览器打开,您现在可以在网页中放置一个专用链接,以从浏览器打开您的应用程序。 This Page还介绍了如何将参数传递给您的程序。

答案 1 :(得分:0)

在win10中,您可以尝试使用URI handlers。应该有 Package.appxmanifest 文件,您可以在其中列出应启动应用程序的URI。

此外,我发现以下有趣的文章描述了web-to-app approach for various OS