我试图设置一种方法来管理我在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第一次对我失败,所以我开始认为我必须遗漏一些重要的东西。我尝试检查"注册COM Interop"在项目属性中,我尝试将其设为COM-Visible。
我知道这只适用于Vista或更新版本,这很好,因为我的程序无论如何都不支持XP。我在Windows 8.1上测试它,包括管理员和普通用户。
编辑:它适用于Windows 7!在MSDN上,它没有说在Win8中不推荐使用这个API ...
我做错了什么?有没有更简单的方法来做到这一点,我不知道?
答案 0 :(得分:1)
[assembly: AssemblyCompany("YourCompany")]
如果它是一个空字符串,它将无效!