10

我有几个相关的问题:

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

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

4

4 回答 4

7

关于文件关联,我之前写过一个答案,至少涵盖了 "How"

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

这里的关键问题是:您是否应该随机更改文件关联?至少提前询问用户显然是必要的(正如您也指出的那样)。

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

编辑

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

于 2008-10-21T16:51:51.027 回答
3

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

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

这种方法的主要缺点是:

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

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

当然,我建议不要使用这种方法,因为您的应用程序只需发生一次崩溃即可使该关联永久化,而且由于很少有应用程序知道如何处理 HKCU 中的文件关联,因此对于原始应用程序。

于 2008-10-21T17:54:33.770 回答
2

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

这些关联在注册表中的 HKEY_CLASSES_ROOT 下列出,并且可以通过多种方式映射(mime 类型/progIDs/等)。

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

我不认为我会推荐“即时”文件类型关联

于 2008-10-21T16:45:35.047 回答
1

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

至于错,我不会。第一个原因是它不是应用程序的标准行为。第二个原因是,如果您的应用程序或 PC 意外退出,您将面临无法将关联恢复到原始设置的风险。

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

于 2008-10-21T16:46:51.050 回答