DMProcessConfigXML закрывает работающее приложение, если используется для удаления на платформе WM / CE

У меня есть два приложения, которые установлены в устройстве WM / CE.

Установленные приложения APP1.exe & APP2.exe.

Во время установки APP1 & APP2 другой процесс, который doJob.exe хранится в соответствующей папке APP1 & APP2.

В принципе APP1 имеет свой каталог & то же самое относится и к APP2.

Пожалуйста, обратите внимание:

  1. APP1 & APP2 внутренне запускает вышеуказанный процесс doJob.exe.
  2. И то и другое APP1 & APP2 использует то же имя для внутреннего запуска другого процесса, т.е. doJob.exe.

Что я делаю:

  1. Только бери APP1 который внутренне запускает связанный процесс doJob.exe.

  2. От APP1.exe, Я звоню DMProcessConfigXML API для удаления APP2.

  3. Это должно удалить весь материал APP2 в том числе doJob.exe присутствует под APP2 каталог.

Наблюдение:

  1. призвание DMProcessConfigXML, закрывает doJob.exe связаны с APP1 при удалении материала APP2.

Ожидаемое:

  1. Не должен закрывать doJob.exe процесс, связанный с APP1.

Код показан ниже:

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

Решение

Это поведение программы 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 не пытается закрыть исполняемые файлы, отправленные в образе времени выполнения на целевом устройстве.

1

Другие решения


По вопросам рекламы [email protected]