安装部署 » 客户端安装

必须先运行Register_all.bat,AnyChat SDK才能正常工作吗?

172. 如何快速评估AnyChat SDK?中我们提及必须先在client目录中运行Register_all.bat注册SDK的组件,然后再运行Demo程序,否则可能导致AnyChat SDK无法正常工作。这是由于AnyChat SDK使用了COM技术,在运行之前,必须将COM组件(.ax文件)注册到系统。

 

如果用AnyChat SDK开发的系统,是不是也必须先运行Register_all.bat批处理程序注册呢?其实有更好的解决办法:

 

方案一:安装程序注册插件

在将SDK组件(client目录中的相关文件)打包到安装程序时,可以将需要注册的COM组件(可参考Register_all.bat文件中的内容)设置为注册安装,这样安装程序在安装的过程中便会自动将COM组件注册。

 

方案二:AnyChat SDK自动注册插件(推荐)

AnyChat Platform Core SDK本身就具有COM组件注册检测功能,通过如下的步骤便可实现自动注册:

1、调用BRAC_SetSDKOption设置SDK组件所在路径

(通常是将AnyChat SDK的发布文件全部放到当前应用程序的某个子目录下,如video目录,其中BRAnyChatCore.dll必须和应用程序放在一起,不需要放到video子目录下)

// 设置SDK核心组件所在目录,必须是完整绝对路径
CHAR szCoreSDKPath[MAX_PATH] = {0};
GetModuleFileName(NULL,szCoreSDKPath,sizeof(szCoreSDKPath));
(strrchr(szCoreSDKPath,'\\'))[1] = 0; 
// 假定SDK相关文件在应用程序的video目录下
strcat(szCoreSDKPath,"video");
BRAC_SetSDKOption(BRAC_SO_CORESDK_PATH,szCoreSDKPath,strlen(szCoreSDKPath));

2、调用BRAC_InitSDK,初始化系统里指定组件注册功能参数

BRAC_InitSDK(m_hWnd,…… | BRAC_FUNC_CHKDEPENDMODULE | ……);

(必须先设置SDK组件路径,再调用初始化接口,才能成功注册)

 

方案三:应用程序注册插件

使用下面的代码,便可以在应用程序中注册插件,只需要将相关插件的文件名(包含完整路径)传入即可

 

// 组件注册
void RegisterComponent(LPCTSTR lpFileName)
{
	HINSTANCE  hLib=::LoadLibraryEx(lpFileName,NULL,LOAD_WITH_ALTERED_SEARCH_PATH);
	if (hLib  >= (HINSTANCE)HINSTANCE_ERROR)
	{
		FARPROC lpDllEntryPoint; 
		lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");
		
		if(lpDllEntryPoint!=NULL)
			(*lpDllEntryPoint)();
		FreeLibrary(hLib);
	}
}

 

 

 

注:

 使用方案二时,如果当客户的操作系统是Vista、Win7,而且开启了UAC的情况下,该方法注册组件将会失效(参考:167. Vista、Win7系统为何注册失败?),此时就必须使用方案一,用安装程序来注册COM组件,因为安装程序会自动提升为管理员权限。

使用方案三的缺点是,如果AnyChat SDK的相关COM文件名进行了变更,或是增加了新的COM组件,则必须修改应用程序的源代码。

Tags: -

相关项目: -

更新日期:2010-07-23 12:29
作者:: 佰锐科技
修订: 1.8