微软的ClickOnce deployment system提供易于使用的文件关联管理器 built into the Visual Studio deployment process .开发人员最多可以添加 8 个文件关联,当用户运行 ClickOnce 安装程序时,这些文件关联将自动与他们的应用程序关联。
不过,我想更进一步:我希望允许用户在安装后从我的应用程序中手动添加或删除其他文件关联。
我有两个动机来完成这个:
- 我不会“强制”用户附加文件关联,这是通过 ClickOnce 部署处理文件关联的方式。
- 用户可以随意添加或删除他们自己的唯一文件关联。
棘手的部分:直接将文件类型与可执行文件相关联与 ClickOnce 部署不兼容
与传统的 Windows 应用程序不同,ClickOnce 应用程序不是通过其可执行文件直接启动的。相反,它们是通过一个特殊的 .appref-ms
快捷方式启动的,该快捷方式处理幕后的 ClickOnce 魔法(自动更新,将可执行文件定位在 %LOCALAPPDATA%
等)。
如果直接通过其可执行文件打开 ClickOnce 部署的应用程序,自动更新将被禁用,并且 ClickOnce 特定的方法将不再起作用。因此,我的用例无法使用传统的注册表文件关联。
Visual Studio 如何处理 ClickOnce 文件关联
下图演示了 Visual Studio 2010 的内置 ClickOnce 文件关联管理器。此信息存储在应用程序的 .manifest 文件中,并在安装时添加到 Windows 注册表中。
我对我的注册表做了一些挖掘,并确定了 ClickOnce 安装程序创建的几个条目,用于将文件类型与 ClickOnce 部署的应用程序相关联。
我在注册表中找到的 ClickOnce 文件类型关联的示例注册表项:
rundll32.exe dfshim.dll, ShOpenVerbExtension {ae74407a-1faa-4fda-9056-b178562cf98f} %1
其中 {ae74407a-1faa-4fda-9056-b178562cf98f}
是一个 GUID,用于关联应用程序的注册表中的其他几个位置。
我的目标是了解必须将哪些信息添加到注册表(以编程方式)以手动将文件与 ClickOnce 部署的应用程序相关联。
感谢任何帮助!
最佳答案
您可以使用 Windows Sysinternals Process Monitor(以前称为 RegMon)确定要添加的注册表项。
当您使用带有默认文件关联的 ClickOnce 安装您的应用程序时捕获事件。它将记录所有注册表操作(很多)。
您需要使用一些过滤器来轻松识别注册表项。
关于c# - 安装后如何手动注册ClickOnce文件关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8797929/