我有一个安装项目中的一个。网服务应用程序,它使用一个。净分至极的公开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.");
}
}

这还取消注册的图书馆在卸载。

其他提示

  1. 在你的主要项目(一个包含的课你想要登记),右击的项目文件和选择增加/新项和选择安装类。叫它什么样的clsRegisterDll.cs
  2. 在设计师出现时,点击'击在这里换到码图'或权击clsRegisterDll.cs文件中的方案资源管理器和选择视码
  3. 复盖安装、提交和卸载方法添加:

    //Get的位置regasm 串regasmPath=系统。运行时间。InteropServices.RuntimeEnvironment.GetRuntimeDirectory()+@"regasm.exe";//Get的位置我们的DLL 串componentPath=类型(RegisterAssembly).大会。位置;//执行regasm
    系统。诊断。过程。开始(regasmPath,"/codebase/tlb\""+componentPath+"\"");

    换/codebase/tlb/u在卸载的行动。

  4. 编译项目
  5. 在你的安装,确保你已经加入dll的应用程序的文件夹,然后右击安装项目和选择查/定制的行动
  6. 右击安装,然后点击添加自定义的行动
  7. 双击的应用程序的文件夹,然后在你dll
  8. 做同样的承诺的行动
  9. 建立和测试你的安装者

演示了一个实际的类为你尝试可以发现: 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接口和以上信息来自其部分称为部署。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top