2011-09-07 48 views

回答

3

看来这个答案是你不能,但是我确实想出了一个解决方案。

我创建了一个启动程序(非常简单的应用程序),它可以找到快捷方式并将其启动参数传递给ClickOnce应用程序。我需要以传统方式安装启动器,但主应用程序仍然可以在需要时通过ClickOnce进行更新。

我发现有用的这些链接:

+0

任何链接为什么你不能? Windows安全限制? –

+0

问题是@KevinBerridge应用程序的路径在每次更新时都会更改,所以对它的任何引用都会中断 – Darren

0

一旦你的应用程序安装系统建立在开始菜单中的链接。链接实际上是一个带有“appref-ms”扩展名的文件。所以,诀窍是注册一个使用“appref-ms”打开应用的协议。

因此,当您ClickOnce应用程序启动时,您可以创建以下注册表项来注册您的协议。 HKEY_CLASSES_ROOT myprotocol = {协议说明} 壳 开放 命令=探险%1

就是这样。现在,当有人点击myprotocol这样的网址时:XXX你的应用将被打开,并将作为ClickOnce应用打开,以便检查是否有新版本等。

+0

我无法得到它的工作方式(它如何针对.appref-ms文件?)。这是我对我的cms协议: HKEY_CLASSES_ROOT \ cms \ shell \ open \ command \(默认)= explorer%1 我也试过了appref-ms文件的路径。 – Darren

0

如果您尝试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

+0

我的应用程序名称是“CMS”(程序集名称),但HKCR中没有键名。如果我将一个文件关联(.cms)添加到ClickOnce选项,则会创建一个.cms关键字,但这没有帮助。也许你可以导出你的密钥并在这里发布(如果需要,可以编辑)。谢谢。 – Darren

+1

添加了注册码。说实话,我仍然不能100%确定为什么/如何创造了这个关键,但我已经在几个环境中重现了它。 –

+0

不幸的是,我无法运行clickonce应用程序(部署到网络),只是添加URL协议。 URL协议启动应用程序,但得到一个System.Deployment.Application.InvalidDeploymentException(UriSchemeNotSupported)说“不支持Uri方案,只支持文件,HTTP和HTTPS方案”。我百分之百被卡住...甚至使用错误消息搜索,但没有返回一个单一的页面。 –