Программное удаление приложений в Windows Mobile

Оригинал статьи:

https://blogs.msdn.com/windowsmobile/archive/2008/12/08/uninstalling-applications-programmatically-in-windows-mobile.aspx

 

 

Привет! Поскольку я впервые публикуюсь в этом блоге, позвольте мне представиться. Меня зовут Чжан Цзинь, и я занимался тестированием механизмов управления приложениями в Windows Mobile на протяжении прошлого года. Для тех, кто не знает, что такое управление приложениями, сообщаю, что оно состоит из wceload (и связанных с ними библиотек), cabwiz и cabsigntool.

Возможно, тема и не нова, но, покопавшись в сети, я заметил, что этот вопрос до сих пор регулярно поднимается. Есть несколько способов удалить приложение, но, возможно, самый простой способ - сделать это с помощью Uninstall Configuration Service Provider (CSP). Всегда хорошо уметь делать какие-то системные операции программно, но для удаления приложений, вероятно, самое распространённое применение - это возможность удалить приложение без вмешательства пользователя. 

По сути, вам придется сформировать и передать некий XML файл, который будет обработан с помощью Uninstall CSP. Организовать это можно разными способами, в нашем случае я воспользуюсь DMProcessConfigXML API. 

В native-коде все, что вам нужно сделать, это подключить "cfgmgrapi.h" и вызвать функцию:
DMProcessConfigXML (LPCWSTR pszWXMLin, DWORD dwFlags, LPWSTR * ppszwXMLout)

В управляемом коде, обёртка предоставляется объектом ConfigurationManager, найти который можно в пространстве имён Microsoft.WindowsMobile.Configuration:
public static XmlDocument ProcessConfiguration (XmlDocument configDoc, BOOL metadata)

Что касается непосредственно XML-строки, можно воспользоваться следующим шаблоном, заменив "Your App" именем вашего приложения:

<wap-provisioningdoc>
<characteristic type="UnInstall">
<characteristic type="Your App">
<parm name="uninstall" value="1" />
</characteristic>
</characteristic >

</ WAP-provisioningdoc>

 

Этот код бесшумно удалит ваше приложение. Имейте в виду, что если ваше приложение содержит setup.dll и ваша Uninstall_Init функция отображает какие-либо сообщения, то бесшумного удаления, безусловно, не получится. Тем не менее, вы можете создать свой setup.dll таким образом, чтобы в случае программного удаления сообщения не отображались.

Я надеюсь, что вышеописанный способ кому-то пригодится. В случае, если у вас есть какие-то специфические вопросы об управлении приложениями, оставляйте их в комментариях, и в случае, если будет проявлено достаточно интереса, я отвечу на них в следующих постах. (прим. пер. – конечно же, вопросы Чжану лучше оставлять в оригинальном блоге).

 

Автор перевода: Андрей Коновалов