如何在Windows 8/8.1中显示"设置程序关联"窗口?

Tuy*_*ham 5 c# c++ file-association default-programs

我希望在安装后第一次运行时显示Set program associationswindows [编辑:我的程序],就像Chrome一样,如下所示:

                        在此输入图像描述

它有:

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

如何通过c#(或win32 c ++)来做到这一点?

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

Sim*_*ier 7

这一点在此处的官方文档中进行了解释:文件关联和默认程序指南

要启动此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
{
}
Run Code Online (Sandbox Code Playgroud)

这还没有完成:-)这只适用于为这个"MyApp"应用程序正确设置注册表,这有点困难.以下是此操作所需的最简单步骤:

1)在HKCR创建一个虚构的"MyAppHTML"编程,如下所示:

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\""
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

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

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\RegisteredApplications]
"MyApp"="Software\\FictionalSoftware\\MyApp\\Capabilities"
Run Code Online (Sandbox Code Playgroud)

如果在运行示例应用程序时出现错误,那么您可能搞砸了注册表布局.如果你没问题,那么你应该看到这样的东西:

在此输入图像描述