在程序中实现注册dll

来源:互联网 发布:华为西研所云计算部门 编辑:程序博客网 时间:2024/05/02 21:50

在程序中实现注册dll(如安装程序),有两种方法:

一.(摘自COM 组件设计与应用(七)编译、注册、调用  作者:杨老师 vckbase)
typedef HRESULT (WINAPI * FREG)();
TCHAR szWorkPath[ MAX_PATH ];

::GetCurrentDirectory( sizeof(szWorkPath), szWorkPath ); // 保存当前进程的工作目录
::SetCurrentDirectory( 组件目录 ); // 切换到组件的目录

HMODULE hDLL = ::LoadLibrary( 组件文件名 ); // 动态装载组件
if(hDLL)
{
 FREG lpfunc = (FREG)::GetProcAddress( hDLL, _T("DllRegisterServer") ); // 取得注册函数指针
 // 如果是反注册,可以取得"DllUnregisterServer"函数指针
 if ( lpfunc ) lpfunc(); // 执行注册。这里为了简单,没有判断返回值
 ::FreeLibrary(hDLL);
}

::SetCurrentDirectory(szWorkPath); // 切换回原先的进程工作目录
上面的示例,在多数情况下可以简化掉切换工作目录的代码部分。但是,如果这个组件在装载的时候,它需要同时加载一些必须依赖的DLL时,有可能由于它自身程序的 BUG 导致无法正确定位。
二.调用shell函数ShellExecute:
CString strParam;
strParam.Format(_T("/s /"%s/""),strPath);
ShellExecute(this->m_hWnd,_T("open"),_T("regsvr32.exe"),strParam,_T(""),SW_HIDE);