如何在安装后手动注册ClickOnce文件关联?

Eva*_*sek 44 .net c# deployment registry clickonce

Microsoft的ClickOnce部署系统提供了一个易于使用的文件关联管理器,该管理器内置于Visual Studio部署过程中.开发人员最多可以添加8个文件关联,当用户运行ClickOnce安装程序时,这些关联将自动与其应用程序关联.

我想更进一步,但是:我希望允许用户在我的应用程序中安装后手动添加或删除其他文件关联.

我有两个动机来完成这个:

  • 我不会"强制"使用用户的其他文件关联,这是通过ClickOnce部署处理文件关联的方式.
  • 用户可以在闲暇时添加或删除自己独特的文件关联.

棘手的部分:直接将文件类型与可执行文件关联与ClickOnce部署不兼容

与传统Windows应用程序不同,ClickOnce应用程序不是通过其可执行文件直接启动的.相反,它们通过一个特殊的.appref-ms快捷方式启动,该快捷方式处理幕后的ClickOnce魔术(自动更新,在可视化目录中查找可执行文件%LOCALAPPDATA%等).

如果通过其可执行文件直接打开ClickOnce部署的应用程序,则会禁用自动更新,并且ClickOnce特定的方法将不再起作用.因此,我的用例不可能使用传统的注册表文件关联.

Visual Studio如何处理ClickOnce文件关联

下图演示了Visual Studio 2010的内置ClickOnce文件关联管理器.此信息存储在应用程序的.manifest文件中,并在安装时添加到Windows注册表中.

VS2010的ClickOnce文件关联管理器

我已经完成了对我的注册表的一些挖掘,并确定了ClickOnce安装程序创建的几个条目,以将文件类型与ClickOnce部署的应用程序相关联.

我在注册表中找到的ClickOnce文件类型关联的示例注册表项:

rundll32.exe dfshim.dll, ShOpenVerbExtension {ae74407a-1faa-4fda-9056-b178562cf98f} %1

{ae74407a-1faa-4fda-9056-b178562cf98f}在其他几个位置使用在注册表中相关的应用程序GUID.

我的目标是了解必须将哪些信息添加到注册表(以编程方式)以手动将文件与ClickOnce部署的应用程序相关联.

任何帮助表示赞赏!

小智 1

Assoc 命令怎么样?

http://support.microsoft.com/kb/184082


助理/?

显示或修改文件扩展名关联

ASSOC [.ext[=[文件类型]]]

.ext 指定文件扩展名以将文件类型与 fileType 关联 指定文件类型以与文件扩展名关联

键入不带参数的 ASSOC 可显示当前文件关联。如果仅使用文件扩展名调用 ASSOC,则会显示该文件扩展名的当前文件关联。不为文件类型指定任何内容,该命令将删除文件扩展名的关联。


文件关联可以是机器级别或用户级别 - 一般来说,HKCR 区域中的内容用于机器级别文件关联。HKCU/软件/类区域中的内容是用户定制的(或者您为他们定制的)每个用户的内容。像“assoc”这样的东西可以在 XP、7 上运行,也可能在 Win 8 上运行(尽管我还没有在 win 8 上使用过这个命令)。