2016-05-19 52 views
0

我想创建一个简单的控制台应用程序来自动注册一个DLL。c#注册DLL使用文件路径(RegistrationService.RegisterAssembly)

经过一番研究,我发现这段代码:

public static bool Register_Dlls(string dllPath) 
{ 
    Assembly asm = Assembly.LoadFile(dllPath); 
    RegistrationServices regAsm = new RegistrationServices(); 
    bool bResult = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase); 
    return bResult; 
} 

实现使用代码并运行它以管理员身份不能被注册的dll我的应用程序。这是我的问题。

但是使用CMD(如管理员)内RegAsm命令,则该dll被正确注册:

C:\windows\system32> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe C:\PWS\Bin\MyContextMenu.dll /codebase 

我的问题是:我会忘了什么东西或上面的代码不能用于我的目的是什么?

该DLL已被编译为'ANY CPU'解决方案平台模式,就像我的应用程序,我需要在x64机器上注册程序集。

+0

在你的dll的项目中,在AssemblyInfo文件中应该存在'ComVisible'属性,默认值为'false'。你把它改成了“真”吗?结果行应该是'[assembly:ComVisible(true)]'。 – Sam

+0

“无法注册”不是有用的诊断,您必须告诉我们失败的样子。如果您没有看到UAC提升提示,则保证失败。 –

+0

是的,这个类是COM可见的,我在类声明之前使用了'[ComVisible(true)]'属性。 – baru

回答

0

解决方案:

我编译我的应用程序迫使“64”解决方案平台模式,现在一切工作正常。

此外,继最后Hans Passant comment后,我改进了我的代码,修改了其requestedExecutionLevel字段中的清单并添加了IsUserAdministrator()方法。谢谢汉斯!