2015-05-21 77 views
0

我在C#中创建了一个浏览器助手对象,它工作正常。我只有一个小问题,那就是当我注册插件并转到Internet Explorer并单击托管插件时。弹出的窗口显示了我的插件的名称,比如namespace.class,其中namespace是我的项目的命名空间,class是我项目中的类名。我曾尝试在AssemblyInfo.cs中设置所有我能想到的东西,但没有改变这个名称。命名浏览器助手对象

[assembly: AssemblyTitle("My title1")] 
[assembly: AssemblyDescription("My title1")] 
[assembly: AssemblyConfiguration("")] 
[assembly: AssemblyCompany("My title1")] 
[assembly: AssemblyProduct("My title1")] 
[assembly: AssemblyCopyright("My title1")] 
[assembly: AssemblyTrademark("My title1")] 
[assembly: AssemblyCulture("")] 
[assembly: AssemblyDefaultAlias("My addon")] 

这是我的currecnt程序集设置,但它没有做我想做的。我也读过关于使用ProgId的一些信息,但是我不太清楚在哪里设置这个,但我认为我已经试过把它放到现在,它不起作用。

我曾尝试将ProdId放在命名空间和类之间,但它似乎没有做任何事情。这是放置这个的好地方吗?

[ 
ComVisible(true), 
Guid("4070B9C7-D748-4A07-920B-63B3533F86F1"), 
ClassInterface(ClassInterfaceType.None), 
ProgId("My Adon") 
] 

回答

1

是的,它对装配没有兴趣。它对实现浏览器助手对象的类感兴趣。使用[ProgId("whatever you want")]属性更改类的ProgId。默认情况下,如果你没有定义它,ProgId默认为“%Namespace%。%Classname%”,无论你定义的命名空间和类是什么。 ProgId属性在System.Runtime.InteropServices中。

0

Finaly解决了这个问题。

[ComRegisterFunctionAttribute] 
    public static void Register(Type type) 
    { 
     string guid = type.GUID.ToString("B"); 
     RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true); 
     if (registryKey == null) 
      registryKey = Registry.LocalMachine.CreateSubKey(BHOKEYNAME); 

     RegistryKey ourKey = registryKey.OpenSubKey(guid); 
     if (ourKey == null) 
      ourKey = registryKey.CreateSubKey(guid); 

     RegistryKey addonNameKey = Registry.ClassesRoot.OpenSubKey(@"CLSID\" + guid, true); 
     if (addonNameKey == null) 
      addonNameKey = Registry.LocalMachine.CreateSubKey(@"CLSID\" + guid); 

     addonNameKey.SetValue("", "ESSO"); 
     addonNameKey.Close(); 
     ourKey.SetValue("NoExplorer", 1); 

     registryKey.Close(); 
     ourKey.Close(); 
    } 

有了这个COM注册功能和manualy改变我叫addonNameKey我能够改变BHO的显示名称的键的值。由于我也在使用visual studio安装程序,因此我需要添加一个安装程序类来使BHO寄存器具有此名称。

相关问题