我想将自定义的URL协议(例如myprotocol://SomeFolder/SomePage
)与ClickOnce应用关联。如何将自定义URL协议与ClickOnce应用关联?
我可以创建没有问题的关联 - 问题是每次应用程序更新(通常是)EXE文件的路径更改。
有没有解决此问题的方法?
我想将自定义的URL协议(例如myprotocol://SomeFolder/SomePage
)与ClickOnce应用关联。如何将自定义URL协议与ClickOnce应用关联?
我可以创建没有问题的关联 - 问题是每次应用程序更新(通常是)EXE文件的路径更改。
有没有解决此问题的方法?
看来这个答案是你不能,但是我确实想出了一个解决方案。
我创建了一个启动程序(非常简单的应用程序),它可以找到快捷方式并将其启动参数传递给ClickOnce应用程序。我需要以传统方式安装启动器,但主应用程序仍然可以在需要时通过ClickOnce进行更新。
我发现有用的这些链接:
一旦你的应用程序安装系统建立在开始菜单中的链接。链接实际上是一个带有“appref-ms”扩展名的文件。所以,诀窍是注册一个使用“appref-ms”打开应用的协议。
因此,当您ClickOnce应用程序启动时,您可以创建以下注册表项来注册您的协议。 HKEY_CLASSES_ROOT myprotocol = {协议说明} 壳 开放 命令=探险%1
就是这样。现在,当有人点击myprotocol这样的网址时:XXX你的应用将被打开,并将作为ClickOnce应用打开,以便检查是否有新版本等。
我无法得到它的工作方式(它如何针对.appref-ms文件?)。这是我对我的cms协议: HKEY_CLASSES_ROOT \ cms \ shell \ open \ command \(默认)= explorer%1 我也试过了appref-ms文件的路径。 – Darren
如果您尝试ClickOnce已经将相应的密钥添加到HKCR,但没有所需的URL协议值。我将此代码添加到我的应用程序逻辑的起点:
try
{
RegistryKey rk = Registry.ClassesRoot.OpenSubKey("MyProgramName", true);
rk.SetValue("URL Protocol", "");
}
catch (Exception ex)
{
// handle, log, etc.
}
哪些行之有效,因为这就是我想要的URL协议指(如“MyProgramName://....
”我能成功做到这一点,而不必我的应用程序。管理权 - 如果我试图注册不同的处理程序,也许会需要它,所以YMMV。至少,看看那里的价值应该让你知道如何正确启动应用程序。
这是默认创建的注册表项:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\MyAppName]
@="Electronic Data Interchange (EDI) File"
"AppId"="MyAppName.application, Culture=neutral, PublicKeyToken=31fc6d113f9bb401, processorArchitecture=msil"
"DeploymentProviderUrl"="file://server/share/MyAppName/MyAppName.application"
"Guid"="{MY_APP_GUID}"
[HKEY_CLASSES_ROOT\MyAppName\shell]
@="open"
[HKEY_CLASSES_ROOT\MyAppName\shell\open]
[HKEY_CLASSES_ROOT\MyAppName\shell\open\command]
@="rundll32.exe dfshim.dll, ShOpenVerbExtension {MY_APP_GUID} %1"
[HKEY_CLASSES_ROOT\MyAppName\shellex]
[HKEY_CLASSES_ROOT\MyAppName\shellex\IconHandler]
@="{MY_APP_GUID}"
而我发布的代码只是在MyAppName
节点下添加了一个空值的URL Protocol
。
我的应用程序名称是“CMS”(程序集名称),但HKCR中没有键名。如果我将一个文件关联(.cms)添加到ClickOnce选项,则会创建一个.cms关键字,但这没有帮助。也许你可以导出你的密钥并在这里发布(如果需要,可以编辑)。谢谢。 – Darren
添加了注册码。说实话,我仍然不能100%确定为什么/如何创造了这个关键,但我已经在几个环境中重现了它。 –
不幸的是,我无法运行clickonce应用程序(部署到网络),只是添加URL协议。 URL协议启动应用程序,但得到一个System.Deployment.Application.InvalidDeploymentException(UriSchemeNotSupported)说“不支持Uri方案,只支持文件,HTTP和HTTPS方案”。我百分之百被卡住...甚至使用错误消息搜索,但没有返回一个单一的页面。 –
任何链接为什么你不能? Windows安全限制? –
问题是@KevinBerridge应用程序的路径在每次更新时都会更改,所以对它的任何引用都会中断 – Darren