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

5
我想展示类似Chrome首次运行时显示“设置程序关联”的窗口,如下图所示:enter image description here。它包括以下内容:
- 我的程序名称 - 我想要设置默认程序的文件类型(不止一个)
请问如何使用C#(或Win32 C++)实现?
编辑:
我阅读了一些有关修改注册表的文章(通过.reg文件或代码),以设置默认程序。然而,由于Microsoft使用哈希值来保护这些注册表项,因此该方法似乎只适用于Windows XP/7或更低版本,而无法在8/8.1上工作。

试试这个:http://www.howtogeek.com/howto/windows-vista/what-is-rundll32exe-and-why-is-it-running/ - Hans Passant
1
你是在问如何将你的程序作为这些扩展的可能默认选项,还是如何启动GUI让用户选择默认选项? - Ben Voigt
是的,我想将我的程序作为某些扩展的可能默认选项。我了解到可以通过注册表进行设置。在Windows XP和7中,这对我有效,但似乎在Windows 8.1中不再起作用,因为Windows使用哈希来检查修改默认程序关联时的情况。 - Thanh Nguyen
1个回答

8
这些内容在官方文档中都有详细解释:文件关联和默认程序的指南
要启动这个由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中(可以使用HKLM替换HKCU),如下所示:

Windows Registry Editor Version 5.00

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

如果您在运行示例应用程序时遇到错误,则可能混乱了注册表布局。如果您成功运行,那么您应该看到类似这样的内容:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接