У меня есть два приложения, которые установлены в устройстве 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.
Это поведение программы WCELOAD, которая является системной программой, фактически выполняющей удаление за кулисами. Смотрите раздел Замечания Вот для дополнительной информации.
В 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 не пытается закрыть исполняемые файлы, отправленные в образе времени выполнения на целевом устройстве.