我在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")]
这是我目前的装配设置,但它没有做我想要的。我也读过一些关于使用ProgId但我不太确定在哪里设置这个但我觉得我已经尝试过将其放在任何地方并且它无法工作。
我已经尝试将ProdId放在命名空间和类之间,但它似乎没有做任何事情。这是放置这个的最佳位置吗?
[
ComVisible(true),
Guid("4070B9C7-D748-4A07-920B-63B3533F86F1"),
ClassInterface(ClassInterfaceType.None),
ProgId("My Adon")
]
答案 0 :(得分:1)
是的,它对集会不感兴趣。它对实现浏览器帮助程序对象的类感兴趣。使用[ProgId("whatever you want")]
属性更改类的ProgId。默认情况下,如果您没有定义它,ProgId默认为"%Namespace%。%Classname%"无论你定义的命名空间和类是什么。 ProgId属性位于System.Runtime.InteropServices。
答案 1 :(得分:0)
最终解决了这个问题。
[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注册功能并手动更改名为addonNameKey的键的值,我能够更改BHO的显示名称。由于我还使用了visual studio安装程序,我需要添加一个安装程序类,以便使用此名称生成BHO寄存器。