对一个CooCare的插件,有以下要求:
3.1 安装卸载(必须)插件必须提供自己的安装程序,并按照规定在安装和卸载的时候调用CooCare平台的相应接口,以对插件的信息进行设置,包括名称、描述、标识和版本号等。
这样,插件就可以纳入CooCare平台的统一管理,包括下载、安装、升级以及卸载。
3.2 UI集成(可选)为了能够在CooCare客户端的应用导航面板里进行显示,插件必须以DLL的方式输出几个规定的函数,供CooCare平台进行加载和调用。每个插件都给分配了一个固定的显示窗口,除标题栏和边框之外的区域由插件负责自己的内容显示。还可以在联系人的右键操作菜单里加入插件特定的菜单项。
3.3 远程调用(可选)如果要支持远程的接口调用,比如远程协助和远程任务,则插件还必须以DLL的方式输出几个规定的函数,供CooCare平台进行加载和调用。
除此之外,插件还可以主动调用平台提供的一些基本服务,比如:
1. 建立P2P网络通讯管道
2. 查询其它插件
3. 授权查询
4.API接口
目前只提供C++的接口支持,其它语言尚不支持。
插件的安装程序可以用任何工具来开发,但是必须在安装开始前通知平台,并在安装结束后再次通知平台保存相应的信息。同样,在插件的卸载开始和结束前也要通知平台。
安装完成后,插件的信息就会自动出现在CooCare的工具管理里。但是你还需要关闭和重新启动CooCare,才会看到新安装插件的窗口。在插件管理器里,用户可以开启、关闭和卸载插件。
根据需要,插件的安装程序也可以在控制面板的添加删除程序里添加自己的卸载项,或者在开始菜单里建立自己的快捷方式。这些需要插件的安装程序自己完成,平台不提供支持。
如果要支持静默安装,插件的安装程序必须支持“/silent”命令行参数。
插件的属性:
每个插件都会有一个唯一的标识,我们叫做插件ID(PluginID)。该标识由平台分配,也可以在提交软通时指定。为了管理的方便,我们建议为每个插件都生成一个唯一标识,并在提交软通时进行说明。PluginID是最大长度为32字符的任意字符串,为避免冲突,建议使用GUID(需要去掉中间的“-”符号)。
插件除了有PluginID之外,还有其它的信息,比如版本号,语言等。不管版本号和语言等属性如何变化,每个插件的PluginID是不能变的。
插件属性并不保存在安装包里,而是在上传服务器时进行指定。在插件管理器下载插件时会首先获得插件的属性信息,并生成一个wpi.config文件保存于插件安装包的下载目录里。在插件安装结束前调用平台的接口,最后完成该信息的读取以及保存操作。
因此,在插件的安装程序目录下必须有一个wpi.config文件。在测试时,可以放一个临时的wpi.config文件,以保证注册成功。
WPI.CONFIG文件的格式:
[pluginInfo]
PlugIdStr=<插件ID>
[plug_params]
name=<插件名称>
version=<版本号>
vendor=<开发商>
size=<文件大小>
desc=<描述>
API函数列表
|
名称 |
描述 |
|
WPIS_PreInstall |
插件安装开始前调用 |
|
WPIS_InstallCompleted |
插件安装结束前调用 |
|
WPIS_PreUninstall |
插件卸载开始前调用 |
|
WPIS_UninstallCompleted |
插件卸载结束前调用 |
|
DWORD WPIS_PreInstall(OUT wchar_t *pwszId, IN DWORD dwBufSize) | |
|
描述 |
在插件安装开始前调用,以通知平台以进行适当的显示。 |
|
参数 |
pwszId - 存放插件guid的buffer,调用者应把这个保存起来,卸载插件时要用到; dwBufSize - pwszId buffer的大小(in characters),当前不能小于33 (插件guid长度为32,加上后面的0结束符). |
|
返回值 |
0 - 成功; 其它值 - 失败. 失败通常是安装程序所在的命令位置不存在wpi.config文件. |
|
输出位置 |
WPISetupHelper.dll |
|
平台依赖 |
CooCare 1.0 |
|
DWORD WPIS_InstallCompleted(IN DWORD dwInstallResult, IN const wchar_t* pcwszInstallPath, IN const wchar_t* pcwszMainDllFile, IN const wchar_t* pcwszUninstallFile, IN const wchar_t* pcwszUninstallCmdLine, IN const wchar_t* pcwszAppIconFile, IN DWORD dwAppIcon) | |
|
描述 |
在插件安装结束前调用,以通知平台保存插件的信息。 |
|
参数 |
dwInstallResult - 0表示安装完毕,正常退出,表示安装完毕,需要重起,表示未安装完毕,需要重起后继续安装;每个插件的安装内部不需要处理重起系统;表示取消安装, 其它为特定的安装错误码。 pcwszInstallPath - 插件的安装目录路径; pcwszMainDllFile - 符合CooCare插件规范的插件主DLL的文件名(包括全路径); pcwszUninstallFile - 插件卸载程序的文件名(包括全路径); pcwszUninstallCmdLine - 插件卸载程序的命令行; pcwszAppIconFile - 插件的图标文件名(包括全路径); dwAppIcon - 插件的图标文件中图标序号. |
|
返回值 |
0 - 成功; 其它值 - 失败. |
|
输出位置 |
WPISetupHelper.dll |
|
平台依赖 |
CooCare 1.0 |
|
DWORD WPIS_PreUninstall(IN const wchar_t *pcwszId) | |
|
描述 |
在插件卸载开始前调用,以通知平台以进行适当的显示。 |
|
参数 |
pcwszId - 要卸载插件的guid, 这个应该用安装时由WPIS_PreInstallEx获得的。 |
|
返回值 |
0 - 成功; 其它值 - 失败. |
|
输出位置 |
WPISetupHelper.dll |
|
平台依赖 |
CooCare 1.0 |
|
DWORD WPIS_UninstallCompleted(IN const wchar_t *pcwszId, IN DWORD dwUninstallResult) | |
|
描述 |
在插件卸载结束前调用,以通知平台删除插件信息。 |
|
参数 |
pcwszId - 要卸载插件的guid, 这个应该用安装时由WPIS_PreInstallEx获得的。 dwUninstallResult - 0表示卸载完毕,正常退出,1表示卸载完毕,需要重起,2表示未卸载完毕,需要重起后继续卸载,31表示卸载取消,其它为特定的错误码. |
|
返回值 |
0 - 成功; 其它值 - 失败. |
|
输出位置 |
WPISetupHelper.dll |
|
平台依赖 |
CooCare 1.0 |
调用方式
CooCare安装之后,WPISetupHelper.dll就会安装到系统目录下,插件的安装程序可以直接加载引用。
InstallShield Script
prototype cdecl INT WPISetupHelper.WPIS_PreInstall(byref wstring,INT);
…
string szPlugId;
number nResult;
…
UseDLL(" WPISetupHelper.dll");
nResult = WPISetupHelper.WPIS_PreInstall(szPlugId,MAX_PATH);
如果插件要在导航面板里进行显示,就必须以DLL的方式输出几个标准的函数。平台在启动时会加载插件,并调用指定的函数,以进行插件的初始化和显示工作。
插件的输出函数列表
|
名称 |
描述 |
|
WPI_InitPlugin |
对插件进行初始化 |
|
WPI_GetPluginInfo |
获得插件的基本信息 |
|
WPI_NotifyWindowStatusChanged |
通知插件改变其窗口状态 |
|
WPI_ShutdownPlugin |
关闭插件 |
|
WPI_RESULT WINAPI WPI_InitPlugin(IN OUT PWPI_INIT_PARAM pInitParam) | |
|
描述 |
框架调用这个输出函数对插件模块初始化,主要是传递一些必要的参数给插件模块,同时也从插件模块那里获得相关的参数。另外,插件模块也可以在这个函数里对自身进行初始化,例如资源的分配及初始化等。 |
|
参数 |
pInitParam – 初始化的参数 |
|
返回值 |
参见WPI_RESULT定义 |
|
平台依赖 |
CooCare 1.0 |
|
WPI_RESULT WINAPI WPI_GetPluginInfo(OUT PWPI_PLUGIN_INFO pPluginInfo) | |
|
描述 |
框架调用这个输出函数来获得插件的基本信息。 |
|
参数 |
pPluginInfo – 返回的插件信息 |
|
返回值 |
参见WPI_RESULT定义 |
|
平台依赖 |
CooCare 1.0 |
|
WPI_RESULT WINAPI WPI_NotifyWindowStatusChanged(IN OUT PWPI_WND_STATUS_CHANGED_PARAM pParam) | |
|
描述 |
这个输出函数对于可视插件才需要实现,非可视插件不需要实现。框架调用该函数来通告插件改变其窗口状态(停靠、非停靠 或 绷定)。为使界面统一,框架在每种状态下都提供一个窗口模板,让插件的窗口“嵌”到里面,所以,插件的窗口应该具有以下的窗口属性:Border: None; Style: Child; Control: True. |
|
参数 |
pParam – 新的窗口状态 |
|
返回值 |
参见WPI_RESULT定义 |
|
平台依赖 |
CooCare 1.0 |
|
WPI_RESULT WINAPI WPI_ShutdownPlugin(IN LPVOID lpParam) | |
|
描述 |
框架在退出或关闭插件会调用这个函数。lpParam参数:为0表示即将关闭插件,1表示询问插件是否可以关闭,插件不能执行退出返回为非0,说明当前插件不能被关闭。 |
|
参数 |
·pParam – 退出原因 |
|
返回值 |
参见WPI_RESULT定义 |
|
平台依赖 |
CooCare 1.0 |
详情请参见WPI.H头文件,以及示例代码。
4.3 基本平台服务<TBD>
5. 升级包的制作插件的升级包必须是一个单独的EXE文件,运行后自动完成插件的程序更新,开发者可以自行选择合适的工具来制作升级包。
升级包的安装过程跟插件的安装类似,也需要在安装结束后调用WPIS_InstallCompletedEx函数以通知平台更新插件的版本信息。
为了支持静默安装,升级包必须支持“/silent”命令行参数。
升级包由插件开发商提供,然后由软通上传到CooCare服务器。
插件开发商在提供升级包时,需要说明以下升级包的属性,包括:
|
描述 |
对升级内容的简要描述 |
|
旧版本号 |
需要升级的目标版本 |
|
新版本号 |
升级后的版本号 |
|
依赖的平台版本 |
如果对平台的版本有依赖,也需要指定。如果平台的版本不符合,用户将看不到该升级包。 |
|
重要程度 |
是否必须,还是可选。 |
以上升级包的信息将随着升级包一起被下载,并保存于同目录的wpi.config文件里(跟插件安装同),在升级完毕后由平台负责更新插件的版本信息。
升级包上传服务器后,CooCare客户端就会提示用户进行下载和安装。