我有几个相关问题:

1)是否可以使我的程序更改文件类型关联,但仅在运行时?您认为这种行为有什么问题吗?

2)我看到的另一个选项是让用户决定使用我的应用程序打开或恢复默认关联......就像是:“捕获所有 .lala 文件”或“恢复 .lala 关联”。我怎样才能做到这一点?您认为最好的方法是什么?

有帮助吗?

解决方案

关于文件关联,我之前写了一个答案,至少涵盖”如何“

这也应该指出如何处理备份和恢复的正确方向。通过c#直接注册表访问,不需要使用.reg文件,因此您可以在应用程序中自由备份以前的值,并从那里恢复它。

这里的关键问题是: 你应该随机改变文件关联吗?至少要求用户预先显然是必要的(正如你所指出的那样)。

此外,启用了UAC的Vista用户或其他Windows版本的非特权用户可能没有更改全局文件关联所需的权限。程序的(un)安装过程可能是唯一可以成功的地方。

修改

Franci Penov在回答中指出一种基于每个用户更改本地文件关联的方法,即使对于非管理员也是如此(这就是为什么我在前一段中谈到“全局关联”)。他还提到为什么去那里不太合理。

其他提示

您可以通过将一个小型可执行文件与该文件扩展名相关联来实现“动态”文件关联更改,该文件扩展名在启动时将检查您的主应用程序是否正在运行并将文件名传递给它,或者如果它没有运行,它将调用“常规”关联应用程序。

这种方法的主要优点是您只需修改注册表一次。

这种方法的主要缺点是:

  • 你需要一个辅助进程
  • “拥有”这些文件扩展名的应用程序可以检测到更改并向用户投诉,提示“修复”,从而使您摆脱困境。

或者,您可以在主程序启动时更改文件关联。这甚至适用于非管理员用户。而文件关联存储在 HKEY_CLASSES_ROOT, ,有一个小技巧——HKCR其实是两者的地图 HKEY_LOCAL_MACHINE\SOFTWARE\ClassesHKEY_CURRENT_USER\SOFTWARE\Classes. 。因此,您可以临时在 HKCU 中注册当前用户的文件扩展名,并从 HKLM 中“隐藏”原始关联。

当然,我建议不要采用这种方法,因为应用程序中只需要一次崩溃即可使该关联永久化,并且由于很少有应用程序知道如何处理 HKCU 中的文件关联,因此很可能会出现无法恢复的情况原始应用程序。

它可能已经完成,但我认为它最终会变得很麻烦。所有文件类型关联都存储在注册表中,因此每次应用程序启动和停止时都必须编写/恢复注册表项。此外,根据您执行此操作的频率,可能无法立即在Windows资源管理器中获取新关联。

关联在注册表中的HKEY_CLASSES_ROOT下列出,可以映射到无数种方式(mime types / progIDs / etc)。

我见过的许多应用程序询问您是否要在安装期间将某些文件类型与应用程序相关联,并允许您选择退出并保留当前设置。

我认为我不建议“在飞行中”。文件类型关联

1)您可以定义Open Dialog文件类型下拉列表中的文件类型。 除此之外,可能在应用程序打开时更改文件类型默认值,然后在应用程序关闭期间替换,因为文件类型关联只是一个注册表设置。

至于错误,我不会。第一个原因是它不是应用程序的标准行为。第二个原因是,如果您的应用程序或PC意外退出,则存在不将关联返回到其原始设置的风险。

2)默认情况下,Windows允许用户使用右键单击选择这些选项,然后单击“打开方式”。命令。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top