我有两个安装在WM / CE设备中的应用程序。
已安装的应用 APP1.exe &的 APP2.exe
安装 APP1 & APP2 另一个 doJob.exe 的进程存储在 的相应文件夹中APP1 &的 APP2 即可。
基本上 APP1 有自己的目录&同样适用于 APP2 。
请注意:
我做什么:
仅启动 APP1 ,在内部启动其关联的流程 doJob.exe 。
从 APP1.exe ,我致电DMProcessConfigXML
API以卸载 APP2 。
这样做会卸载 APP2 的完整内容,包括 doJob.exe 在 APP2 目录下。
观察:
预期:
代码如下所示: -
void UninstallApp(){
wstring strRequest =
L"<wap-provisioningdoc><characteristic type=\"UnInstall\">"
L"<characteristic type=\"\\Program Files\\APP2";
strRequest += L"\">"
L"<parm name=\"uninstall\" value=\"1\"/>"
L"</characteristic>"
L"</characteristic></wap-provisioningdoc>";
LPFN_DMPROCESS_CONFIGXML_T lpfn_dmprocess_configxml = NULL;
HRESULT hr = E_FAIL;
LPWSTR wszOutput = NULL;
HMODULE hLib = LoadLibrary(TEXT("aygshell.dll"));
if (hLib)
{
lpfn_dmprocess_configxml = (LPFN_DMPROCESS_CONFIGXML_T)GetProcAddress(hLib, L"DMProcessConfigXML");
if (lpfn_dmprocess_configxml != NULL)
{
hr = lpfn_dmprocess_configxml(strRequest.c_str(), CFGFLAG_PROCESS, &wszOutput);
}
}
if (hLib)
FreeLibrary (hLib);
if (FAILED(hr) || !wszOutput )
MessageBox(NULL,L"Failed",L"Failed",MB_OK);
if ( wszOutput )
free( wszOutput );
}
没有任何线索。 请告诉我,我是否需要在上面的代码中更改XML属性中的内容,否则这是使用DMProcessConfigXML API的一个缺点。
答案 0 :(得分:1)
这是WCELOAD程序的行为,这是系统程序实际在幕后进行卸载。有关详细信息,请参阅备注部分here。
在Windows Mobile 5.0及更高版本中,使用Wceload.exe重新安装.cab文件时,Wceload.exe会在安装新版本之前卸载以前安装的.cab文件版本。 在此过程的卸载部分中,Wceload.exe根据文件名关闭使用.cab文件在目标设备上安装的所有当前正在运行的可执行文件。 Wceload.exe还会关闭作为文件操作目标的任何可执行文件,例如移动或复制。要关闭可执行文件,Wceload.exe会将WM_CLOSE发送到该进程拥有的所有顶级窗口。如果在收到WM_CLOSE消息后进程没有及时退出,则Wceload.exe通过调用TerminateProcess强制关闭它。 Wceload.exe不会尝试关闭目标设备上运行时映像中附带的可执行文件。