注册利用RegSvr32来注册.COM组件

xvideos..com  时间:2021-03-05  阅读:()

利用RegSvr32来注册.NET COM组件

 背景

前一段时间由于业务关系须要在一个比较旧的系统编写一个补丁。原系统使用VB编程但如果要使用VB来实现这个补丁的内容对于我这个并不怎么接触VB的人来说太头痛了。由于平时使用的是C#来开发于是便想到能否用编写.NETCOM组件的方式来让VB调用。想到这两三下便写了个.NETCOM测试组件用VB测试调用测试OK。接下来就是进行后续的开发可等到开发完成后到了补丁打包环节却傻眼了。原来的补丁打包工具在诞生时还不知道.NET为何物所以根本没有使用RegAsm来注册.NET COM组件的功能。现在更改打补丁工具那是不现实的可要使得VB调用.NET COM又必须使用RegAsm注册这下怎么办呢

 解决方式

原打包工具是支持使用Reg Svr32来注册Co m组件的忽然想到能否使用Reg Svr32来注册.N ETCOM组件呢印象中regsvr32在注册DLL的时候会有个Cal lBack函数的于是赶紧Google找找相关资料最终解决了这个问题。主要原理是写一个代理的dl l 在这个DLL的注册响应函数Dl lRegisterServer里调用RegAsm来注册.NET COM 同理在Dl lUnregisterServer里反注册。

 代理DLL代码stdafx.h

#pragma once

#include <windows.h>

#include <tchar.h>

Reg iste r.cpp

/*----------------------------------------------

此组件主要解决C#编写的COM组件无法用RegSvr32注册的问题

原理是增加一个代理DLL在代理DLL注册时 响应DllRegisterServer注册函数

在响应函数中使用RegAsm来注册.Net Com组件反注册同理。

----------------------------------------------*/

#include "stdafx.h"

#define MAX_PATH 260

//全局变量存放注册代理dll路劲

TCHAR g_FilePath[MAX_PATH] ;

BOOL APIENTRY DllMain( HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

//记录代理DLL的路径主要是为了方便后面获取代理DLL所在目录

GetModuleFileName(hModule, g_FilePath, 255) ;

switch (ul_reason_for_call)

{case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;

}return TRUE;

}

//注册响应函数extern "C" _declspec(dllexport) long DllRegisterServer(void)

{return Register(TRUE) ;

}

//反注册响应函数extern "C" _declspec(dllexport) long DllUnregisterServer(void)

{return Register(FALSE) ;

}

//注册组件

//install : TRUE for install, FALSE for unstall

BOOL Register(BOOL install) {

TCHAR cmd[MAX_PATH] ;

PROCESS_INFORMATION processInfo;

STARTUPINFO stInfo;

//获取注册命令

GetCmdLine(cmd, install) ;

ZeroMemory( &processInfo, sizeof(processInfo) ) ;

ZeroMemory( &stInfo, sizeof(stInfo) ) ;stInfo.cb = sizeof(stInfo) ;

BOOL ret;

//创建注册进程ret =

CreateProcess(NULL,cmd,NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&stInfo,&processInfo) ;if(ret==TRUE) {

CloseHandle(processInfo.hProcess) ;

CloseHandle(processInfo.hThread) ;return TRUE;

}else{

//DWORD error = GetLastError() ;return FALSE;

}return FALSE;

}

//获取注册命令加/s开关可以免除确认步骤。

//注册 RegAsm.exe /s Test.dll

//反注册 RegAsm.exe /s /u Test.dllvoid GetCmdLine(LPTSTR cmd, BOOL install) {

TCHAR regAsmPath[MAX_PATH] ;

TCHAR regDl lPath[MAX_PATH] ;

TCHAR temp[10] ;regAsmPath[0] = ' \0' ;regDllPath[0] = ' \0' ;temp[0] = ' \0' ;

GetRegAsmPath(regAsmPath) ; //获取RegAsm.exe程序绝对路径

GetRegDllPath(regDllPath) ; //获取需要注册的.NET COM组件绝对路径if(install) {lstrcpy(temp, _T(" /s ") ) ;

}else{lstrcpy(temp, _T(" /s /u ") ) ;

}cmd[0] = ' \0' ;lstrcat(cmd, regAsmPath) ;lstrcat(cmd, temp) ;lstrcat(cmd, regDllPath) ;

}

//获取需要注册.Net Com组件路径此处写死为Test.dll与代理dll在同一个目录//后期可以改成读取ini配置文件void GetRegDllPath(LPTSTR path) {int count = 0;for(int i=0; i < MAX_PATH; i++) {if(g_FilePath[i] == _T('\\' ) ) {count = i + 2;

}

}

TCHAR temp[MAX_PATH] ;lstrcpyn(temp, g_FilePath, count) ; //代理DLL所在目录lstrcat (path, _T("\"") ) ;lstrcat (path, temp) ;lstrcat (path, _T("Test.dll\"") ) ;

}

//获取.NET COM注册程序RegAsm. exe的路径

//方法读取[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Instal lRoot]的值//然后拼接上"v2.0.50727\RegAsm. exe"void GetRegAsmPath(LPTSTR path) {

HKEY hKey;

DWORD dwBufLen = MAX_PATH;

LONG lRet;lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\.NETFramework") ,0,KEY_READ, &hKey) ;lRet = RegQueryValueEx(hKey, _T("InstallRoot") , NULL, NULL, (LPBYTE)path, &dwBufLen) ;RegCloseKey(hKey) ;lstrcat(path, _T("v2.0. 50727\\RegAsm.exe") ) ;

}

bluehost32元/月,2核2G/20GB空间,独立ip,新一代VPS美国云主机!

bluehost怎么样?bluehost推出新一代VPS美国云主机!前几天,BlueHost也推出了对应的周年庆活动,全场海外虚拟主机月付2.95美元起,年付送免费的域名和SSL证书,通过活动进入BlueHost中文官网,购买虚拟主机、云虚拟主机和独立服务器参与限时促销。今天,云服务器网(yuntue.com)小编给大家介绍的是新一代VPS美国云主机,美国SSD云主机,2核2G/20GB空间,独立...

云如故枣庄高防(49元)大内存2H2G49元8H8G109元

云如故是一家成立于2018年的国内企业IDC服务商,由山东云如故网络科技有限公司运营,IDC ICP ISP CDN VPN IRCS等证件齐全!合法运营销售,主要从事自营高防独立服务器、物理机、VPS、云服务器,虚拟主机等产品销售,适合高防稳定等需求的用户,可用于建站、游戏、商城、steam、APP、小程序、软件、资料存储等等各种个人及企业级用途。机房可封UDP 海外 支持策略定制 双层硬件(傲...

速云:广州移动/深圳移动/广东联通/香港HKT等VDS,9折优惠,最低月付9元;深圳独立服务器1050元/首月起

速云怎么样?速云,国人商家,提供广州移动、深圳移动、广州茂名联通、香港hkt等VDS和独立服务器。现在暑期限时特惠,力度大。广州移动/深圳移动/广东联通/香港HKT等9折优惠,最低月付9元;暑期特惠,带宽、流量翻倍,深港mplc免费试用!点击进入:速云官方网站地址速云优惠码:全场9折优惠码:summer速云优惠活动:活动期间,所有地区所有配置可享受9折优惠,深圳/广州地区流量计费VDS可选择流量翻...

xvideos..com为你推荐
摩根币摩根币是怎么骗人的?firetrap我淘宝店还是卖二单就被删,怎么回事!18comic.fun黑色禁药http://www.lovecomic.cn/attachment/Fid_18/18_4_00d3b0cb502ea74.jpg这幅画名字叫什么?www.7788dy.comwww.tom365.com这个免费的电影网站有毒吗?www.idanmu.com腾讯有qqsk.zik.mu这个网站吗?www.zhiboba.com上什么网看哪个电视台直播NBAm.yushuwu.org花样滑冰名将YU NA KIM的资料谁有?xvideos..comxvideos 怎么下载铂金血痕手上出现这种血痕是什么情况。有谁知道能告诉下吗? 怎么治疗!bihaiyinsha谁知道长葛洗浴中心如何消费?
免费域名空间 备案域名查询 hostigation 息壤备案 realvnc ssh帐号 轻量 gg广告 骨干网络 美国免费空间 100mbps 银盘服务是什么 双12 域名dns 四川电信商城 登陆空间 湖南idc 双线空间 云服务是什么意思 hostease 更多