您的位置:首页 > 其它

Windows mobile下如何程序控制CAB的安装

2009-09-10 20:31 369 查看
最近在负责一个App Store客户端的开发,其中一个特性就是App Store Client要负责Native App和Widget的管理。对于Widget的管理来说,因为widget是进程内运行,安装、运行都是受App Store Client控制,Native App的安装过程是系统执行的,不受App Store Client进程控制,当App Store Client下载了一个Native App后,如何自动触发安装过程,如何在Native App安装完毕后,即时在App Store Client的桌面上创建出相应的图标出来。

1. 如何在程序中安装Cab包

在Windows和Windows Mobile下,ShellExecute(Ex)函数支持打开文件,文件夹等操作,他的参数是SHELLEXECUTEINFO结构体,我们关注lpFile和lpParameters两个参数即可。看看下面的例子,大家也就明白了,如果还不明白可以参考MSDN文档。

SHELLEXECUTEINFO ShellInfo;
memset(&ShellInfo, 0, sizeof
(ShellInfo));
ShellInfo.cbSize = sizeof
(ShellInfo);
ShellInfo.hwnd = NULL;
ShellInfo.lpVerb = _T("open
");
ShellInfo.lpFile
= _T("//program files//versions//Cwidget.cab
");
ShellInfo.nShow = SW_HIDE;
ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShellInfo.lpParameters
= _T("
//Windows//wceload.exe

"
);

//安装进程启动失败,做失败处理

if(!ShellExecuteEx(&ShellInfo))
{
int error = GetLastError();
ProcessFailEvent();

return;
}

2.如何检测安装什么时候结束?

ShellExecuteEX创建了独立的进程,在SHELLEXECUTEINFO结构体中有一个成员变量就是hProcess,用来指示新创建的进程。我们可以通过WaitForSingleObject函数来等待安装的操作,当安装结束后,事件触发,我们就可以继续处理其他的事情了,比如更新我们的桌面、启动应用。

WaitForSingleObject(ShellInfo.hProcess,INFINITE);

//我们可以去增加新的图标的处理了

//ProcessPostInstallEvent();
MessageBox(_T("Install OK"),_T("Information"),MB_OK);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: