C# 中的 LaunchAdvancedAssociationUI -> 在 Windows 8 上找不到元素

LaunchAdvancedAssociationUI in C# -> Element not found on Windows 8

我正在尝试设置一种方法来管理我在 C# 中的程序的文件关联。我已经使用 WiX 在注册表中设置了正确的值,并找到了 ApplicationAssociationRegistrationUI 的包装器,它应该允许我打开 GUI 来设置文件关联。但它不起作用。我收到以下异常:找不到元素。 (HRESULT 异常:0x80070490)

包装器:

namespace FileAssociation
{
    [ClassInterface(ClassInterfaceType.None)]
    [ComImport]
    [Guid("1968106d-f3b5-44cf-890e-116fcb9ecef1")]
    [TypeLibType(TypeLibTypeFlags.FCanCreate)]
    public sealed class ApplicationAssociationRegistrationUI : IApplicationAssociationRegistrationUI
    {
        [MethodImpl(MethodImplOptions.InternalCall)]
        public extern void LaunchAdvancedAssociationUI(string appRegistryName);
    }

    [CoClass(typeof(ApplicationAssociationRegistrationUI))]
    [ComImport]
    [Guid("1f76a169-f994-40ac-8fc8-0959e8874710")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [TypeLibImportClass(typeof(ApplicationAssociationRegistrationUI))]
    public interface IApplicationAssociationRegistrationUI
    {
        void LaunchAdvancedAssociationUI([MarshalAs(UnmanagedType.LPWStr)] string appRegistryName);
    }
}

用法:

var assocUi = new ApplicationAssociationRegistrationUI();
try
{
     assocUi.LaunchAdvancedAssociationUI(InstanceManager.ProgId);
}
catch
{
     MessageBox.Show("Could not display the file association manager. Please repair the installation and try again.", "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
}
finally
{
     Marshal.ReleaseComObject(assocUi);
}

同样,注册表中存在所有正确的键。这不是我第一次 COM Interop 惨败,所以我开始认为我一定遗漏了一些重要的东西。我尝试在项目属性中检查 "Register for COM Interop",并尝试将其设置为 COM-Visible。

我知道这只适用于 Vista 或更新版本,这很好,因为我的程序无论如何都不支持 XP。我正在 Windows 8.1 上以管理员和普通用户身份对其进行测试。

编辑:它适用于 Windows 7!在 MSDN 上,它并没有说这个 API 在 Win8 中被弃用了...

我做错了什么?有没有我不知道的更简单的方法?

终于找到问题了!!! 从 Windows 8 开始,程序需要有公司信息(我认为这是一个错误,因为微软的网站上没有提到它。) 所以一定要在AssemblyInfo.cs中填写这个属性:

[assembly: AssemblyCompany("YourCompany")]

如果是空字符串就不行!