Visual studio 2008 如何从Visual Studio 2008安装项目向regasm注册.NET CCW
我有一个.NET服务应用程序的安装项目,它使用一个.NET组件,该组件公开一个COM接口(COM可调用包装器/CCW)。 要使组件在目标机器上工作,必须向注册 regasm.exe/tlb/codebase component.dll 在这种情况下,生成typelib的/tlb开关是必需的,否则我无法从该程序集创建对象Visual studio 2008 如何从Visual Studio 2008安装项目向regasm注册.NET CCW,visual-studio-2008,installation,registration,ccw,Visual Studio 2008,Installation,Registration,Ccw,我有一个.NET服务应用程序的安装项目,它使用一个.NET组件,该组件公开一个COM接口(COM可调用包装器/CCW)。 要使组件在目标机器上工作,必须向注册 regasm.exe/tlb/codebase component.dll 在这种情况下,生成typelib的/tlb开关是必需的,否则我无法从该程序集创建对象 问题是,如何配置Visual Studio 2008安装项目以通过调用regasm/tlb注册此程序集?您的服务应该具有安装程序类。 注册到OnAfterInstall事件并调用
问题是,如何配置Visual Studio 2008安装项目以通过调用regasm/tlb注册此程序集?您的服务应该具有安装程序类。 注册到OnAfterInstall事件并调用RegAsm:应该从Windows目录计算路径,并绑定到特定的.Net版本
System.Diagnostics.Process.Start(regaspath,“/codebase/tlb\”“+componentPath+”) 在卸载操作中为/u交换/codebase/tlb
可以在以下位置找到供您尝试的实际类的演练:您可以使用System.Runtime.InteropServices.RegistrationServices来丢失对regasm.exe的手动调用:
[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.");
}
}
这也会在卸载时注销库。我最初尝试从安装程序进程运行regasm(在看到此帖子之前)。尝试运行regasm并处理所有错误是有问题的,即使没有尝试处理Windows 7的提升权限
使用
Runtime.InteropServices.RegistrationServices.RegisterAssembly
更干净,提供了更好的错误捕获功能。Visual Studio安装程序只注册COM类,但不生成和注册类型库(这是/tlb
在regasm.exe上切换时所做的事情
)默认情况下。至少在Visual Studio 2017中,使用Tlbexp.exe
实用程序在DLL的后期构建步骤中生成要注册的类型库就足够了
如果安装程序项目发现扩展名为.tlb
的文件位于与正在安装的库相同的目录中,并且具有相同的名称,它会自动将其包含到安装项目中,并在安装过程中执行注册步骤。当然,也可以手动生成.tlb
文件并将其包含在安装项目中(并将其寄存器属性设置为vsdrfCOM
)
下面是一个关于C#和COM接口的介绍,上面的信息来自其名为Deployment的部分。应该将此代码添加到哪些内容中?我有一个VB.net项目,它需要regasm,并且有一些C#依赖项。这两个方法可以添加到实现哪个超类或接口的类中?我看到这两个方法被添加到一个覆盖System.Configuration.Install.Installer的类中,然后这个类被添加为主输出?我不知道如何将此类或这些操作添加到安装程序中。它们是否会随程序集自动添加,或者我是否需要添加操作?
“我不确定如何将此类或这些操作添加到安装程序中。”
有关如何将其添加到安装程序包的详细信息,请参阅另一个答案中的。这个答案是对链接文章中代码的修改。