【问题标题】:How to show "Set program associations" window in Windows 8/8.1?如何在 Windows 8/8.1 中显示“设置程序关联”窗口?
【发布时间】:2015-04-24 12:01:32
【问题描述】:

我想在安装后第一次运行时像 Chrome 一样显示Set program associations windows [edit: for my program],如下所示:

                 

它有:

  • 我的程序名称
  • 我要设置默认程序的文件类型(多个)

c#(或win32 c++)如何实现?

编辑
我阅读了一些关于修改注册表的文章(通过 .reg 文件或通过代码修改注册表)来设置默认程序。它似乎只适用于 Windows XP/7 或更低版本,而不是 8/8.1,因为 Microsoft 使用哈希来保护这些注册表。

【问题讨论】:

  • 您是在问如何将您的程序作为这些扩展的可能默认设置,或者如何启动 GUI 让用户选择默认设置?
  • 是的,我想提供我的程序作为某些扩展的可能默认值。我读到了注册表设置。它在 Windows XP 和 7 中适用于我,但在 Windows 8.1 中似乎不再适用,因为 Windows 使用哈希来检查何时修改默认程序关联。

标签: c# c++ file-association default-programs


【解决方案1】:

这在官方文档中都有解释:Guidelines for File Associations and Default Programs

要启动此 Windows 提供的 UI,您可以使用 IApplicationAssociationRegistrationUI 界面。

下面是一个示例控制台应用程序,它为虚构的“MyApp”应用程序演示了这一点:

class Program
{
    static void Main(string[] args)
    {
        IApplicationAssociationRegistrationUI app = (IApplicationAssociationRegistrationUI)new ApplicationAssociationRegistrationUI();
        int hr = app.LaunchAdvancedAssociationUI("MyApp");
        Exception error = Marshal.GetExceptionForHR(hr);
        if (error != null)
        {
            Console.WriteLine("Error: " + error.Message);
        }
    }
}

[Guid("1f76a169-f994-40ac-8fc8-0959e8874710")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IApplicationAssociationRegistrationUI
{
    [PreserveSig]
    int LaunchAdvancedAssociationUI([MarshalAs(UnmanagedType.LPWStr)] string pszAppRegName);
}

[ComImport]
[Guid("1968106d-f3b5-44cf-890e-116fcb9ecef1")]
public class ApplicationAssociationRegistrationUI
{
}

这还没有完成 :-) 这只有在为这个“MyApp”应用程序正确设置注册表的情况下才有效,这有点困难。以下是实现此功能所需的最简单步骤:

1) 在 HKCR 中创建一个虚构的“MyAppHTML”progid,如下所示:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MyAppHTML]
@="MyApp HTML Document"

[HKEY_CLASSES_ROOT\MyAppHTML\Application]
"ApplicationCompany"="Fictional Software Inc."

[HKEY_CLASSES_ROOT\MyAppHTML\shell]
@="open"

[HKEY_CLASSES_ROOT\MyAppHTML\shell\open]

[HKEY_CLASSES_ROOT\MyAppHTML\shell\open\command]
@="\"C:\\the app path\\testassoc.exe\""

2) 声明一个虚构的“MyApp”应用程序(我建议使用 HKCU,但它可能是 HKLM),来自虚构的“FictionalSoftware”公司,例如,具有两个文件关联:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\FictionalSoftware]

[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp]

[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities]
"ApplicationDescription"="My Fictional Application"

[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities\FileAssociations]
".htm"="MyAppHTML"
".html"="MyAppHTML"

3) 将此应用程序注册到 Windows(同样,HKCU 可以替换为 HKLM),如下所示:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\RegisteredApplications]
"MyApp"="Software\\FictionalSoftware\\MyApp\\Capabilities"

如果您在运行示例应用程序时遇到错误,那么您可能弄乱了注册表布局。如果你没问题,那么你应该会看到如下内容:

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2013-06-26
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多