【问题标题】:Change default application for .txt更改 .txt 的默认应用程序
【发布时间】:2016-11-30 13:33:10
【问题描述】:

在网上搜索了很多都没有成功,我在这里寻求帮助。

这个问题似乎很简单,但不幸的是我无法解决它。

我想更改默认应用程序以打开 .txt 文件。例如,我不想使用记事本,而是使用位于C:\Program Files\Windows NT\Accessories\wordpad.exe的写字板

所以我尝试更改注册表:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithProgids,但没有成功。

我还找到了一个尝试更改组策略的解决方案。此代码如下所示:

string tempFile = Path.GetTempFileName();
string xmlFile = tempFile.Replace(".tmp", ".xml");
File.Move(tempFile, xmlFile);

XDocument document = new XDocument(new XElement("DefaultAssociations",
    new XElement("Association",
        new XAttribute("Identifier", ".txt"),
        new XAttribute("ProgId", "txtFile"),
        new XAttribute("ApplicationName", "Editor"))));
document.Save(xmlFile);

ComputerGroupPolicyObject.SetPolicySetting(@"HKLM\Software\Policies\Microsoft\Windows\System!DefaultAssociationsConfiguration",
    xmlFile, RegistryValueKind.String);

但这也行不通。

我也尝试使用带有ftype 的命令行,但这也没有用。

谁能告诉我如何更改给定文件类型的关联应用程序?

【问题讨论】:

  • 不工作是什么意思?
  • 想要以编程方式执行这是一件相当奇怪的事情。唯一应该更改其默认应用程序的人是用户,而不是您的程序。这有点像“我的应用程序太棒了,它应该是你默认的一切!”情况。
  • @CodyGray -- 嗯,我使用过的大量商业软件产品让您可以选择设置某些文件扩展名以使用它们的应用程序。我看不出有什么问题,只要应用程序在不告诉用户的情况下不这样做。
  • not work 表示默认应用没有改变
  • 奇怪的是我的电脑没有 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer ...所以这可以解释为什么它不起作用..它在 HKEY_LOCAL_MACHINE....

标签: c# registry


【解决方案1】:

我猜你想这样做是因为你的程序中有某种Set as default 选项,顺便说一句,我花了最后一个小时试图弄清楚为什么它不起作用,这就是我所拥有的目前找到了。

您需要采取的步骤如下:

  • 在 ClassesRoot 中为 .custom 扩展创建一个注册表项。 (期间很重要)

代码:

Registry.ClassesRoot.CreateSubKey(".custom").SetValue("", "customfile", Microsoft.Win32.RegistryValueKind.String);`
  • 创建“Customfile”子键和“customfile\open\command” 存储应用程序路径所需的子键 打开此文件类型。

代码:

Registry.ClassesRoot.CreateSubKey("Customfile\shell\open\command").SetValue("", PATH_TO_YOUR_EXE, Microsoft.Win32.RegistryValueKind.String);

现在已经建立了关联,您的应用将被注册为可以打开该扩展的应用之一。


.txt 的大小写(或其他已关联的扩展名)

在搞砸了一点之后,我发现为了对已经关联的扩展进行更改,您还需要编辑注册表

示例(带有 .txt 扩展名)

 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice

此键有一个ProgId 值,实际上包含用户设置的默认应用程序,该值为string。所以你也可以编辑/删除这个注册表。

希望对你有帮助:)!

【讨论】:

  • 我在重复我在这个问题上留下的评论。您的答案适用于哪个 Windows 操作系统?根据this answer 和this answer 以及这个TechNet article,自Windows 7 以来,微软让以编程方式添加或更改文件扩展名关联变得更加困难。
  • @DavidRR 在 Win Vista 之前,您可以毫无问题地编辑注册表,之后就不能这样做,甚至不能添加它。我刚刚在Win10 中进行了测试,即使您以管理员身份运行它也无法编辑ProgId,您可以删除UserChoice 文件夹但无法添加它。 Win8 也是如此,不幸的是我不能对 Win7 说同样的话,因为我还没有测试过
  • @DavidRR 实际上我认为这没关系,因为这样应用程序无法根据需要编辑用户首选项。如果他们确实删除了UserChoice 文件夹,则会提示用户再次选择要使用的应用
  • Web 浏览器和 PDF 阅读器等应用程序在其 UI 中提供选项,以允许用户将应用程序设置为给定文档类型的默认值(仅限该用户)。因此,即使在 Windows 10 中也必须能够以编程方式执行此操作。
  • @DavidRR 我会对此进行调查,如果我发现了什么会告诉你:)
猜你喜欢
  • 2017-06-21
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2013-07-17
  • 1970-01-01
  • 2013-05-18
相关资源
最近更新 更多