如何登记。净《特定常规武器与regasm从Visual Studio2008年安装项目
-
04-07-2019 - |
题
我有一个安装项目中的一个。网服务应用程序,它使用一个。净分至极的公开COM接口(COM可调用的包装/CCW)。要获得成分的工作目标的机,它已经被注册
regasm.exe /tlb/codebase component.dll
/Tlb换产生的类型库是强制性的,在这种情况下,否则我不可能创建的对象,会。
问题是,如何才能配置我Visual Studio2008年安装项目的注册这个大会呼吁regasm/tlb?
解决方案
你可能会失去手动呼吁regasm.exe 通过使用系统。运行时间。InteropServices.RegistrationServices替代:
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{
throw new InstallException("Failed to register for COM Interop.");
}
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.UnregisterAssembly(GetType().Assembly))
{
throw new InstallException("Failed to unregister for COM Interop.");
}
}
这还取消注册的图书馆在卸载。
其他提示
- 在你的主要项目(一个包含的课你想要登记),右击的项目文件和选择增加/新项和选择安装类。叫它什么样的clsRegisterDll.cs
- 在设计师出现时,点击'击在这里换到码图'或权击clsRegisterDll.cs文件中的方案资源管理器和选择视码
复盖安装、提交和卸载方法添加:
//Get的位置regasm 串regasmPath=系统。运行时间。InteropServices.RuntimeEnvironment.GetRuntimeDirectory()+@"regasm.exe";//Get的位置我们的DLL 串componentPath=类型(RegisterAssembly).大会。位置;//执行regasm
系统。诊断。过程。开始(regasmPath,"/codebase/tlb\""+componentPath+"\"");换/codebase/tlb/u在卸载的行动。
- 编译项目
- 在你的安装,确保你已经加入dll的应用程序的文件夹,然后右击安装项目和选择查/定制的行动
- 右击安装,然后点击添加自定义的行动
- 双击的应用程序的文件夹,然后在你dll
- 做同样的承诺的行动
- 建立和测试你的安装者
演示了一个实际的类为你尝试可以发现: http://leon.mvps.org/DotNet/RegasmInstaller.html
您的服务应该有一个安装类。登记册的OnAfterInstall事件,并呼RegAsm:路径应当被计算从Windows目录和绑到一个特定的。网版本。
我最初试图运行regasm从安装进程(前我看到这张贴).试图运行regasm,并处理所有的错误是有问题-即使没有试图处理提升的权限为Windows7。
使用 Runtime.InteropServices.RegistrationServices.RegisterAssembly
是更清洁并提供一个更好的错误捕获。
Visual Studio安装使只COM类登记,但不会使型图书馆的产生和登记(这是什么 /tlb
开关在 regasm.exe does
)的默认。至少在Visual Studio2017它足以产生类型的图书馆在后建立的步骤的DLL要注册的使用 Tlbexp.exe
实用工具。
如果安装项目中发现的文件的扩展 .tlb
在相同的目录和名称相同的图书馆安装,它会自动包括它的安装项目,并使该登记的步骤在安装过程中。当然,这也可能产生的 .tlb
文件方面并将它包括在安装项目(并设置其财产登记要 vsdrfCOM
).
这里是一个 伟大的文章 关于C#COM接口和以上信息来自其部分称为部署。