Программное удаление приложений в Windows Mobile
Оригинал статьи:
Привет! Поскольку я впервые публикуюсь в этом блоге, позвольте мне представиться. Меня зовут Чжан Цзинь, и я занимался тестированием механизмов управления приложениями в 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 таким образом, чтобы в случае программного удаления сообщения не отображались.
Я надеюсь, что вышеописанный способ кому-то пригодится. В случае, если у вас есть какие-то специфические вопросы об управлении приложениями, оставляйте их в комментариях, и в случае, если будет проявлено достаточно интереса, я отвечу на них в следующих постах. (прим. пер. – конечно же, вопросы Чжану лучше оставлять в оригинальном блоге).
Автор перевода: Андрей Коновалов