技术开发 频道

如何通过CSP编程卸载Windows Mobile应用程序

 使用CSP来删除特定的应用程序

 首先,需要查询该应用程序能否被删除,实际上我们在通过Visual Studio制作安装包(CAB)的时候会有这个选项,也就是说你可以让你的程序是不可被删除的(不可通过系统的删除程序来删除)。这里,通过CSP我们同样只能卸载那些允许被卸载的程序。MSDN里面给了一个例子,用来查询能被删除的程序,我们的程序可以参考这个例子入手。我预先随便创建了一个Smart Device CAB项目,命名叫”TestCAB”。参考例子,容易写出C#代码如下:

 

  String query = "<wap-provisioningdoc><characteristic type=\"UnInstall\"><characteristic-query type=\"TestCAB\"/></characteristic></wap-provisioningdoc>";

 XmlDocument xDoc = new XmlDocument();

 xDoc.LoadXml(query);

 xDoc = ConfigurationManager.ProcessConfiguration(xDoc, true);

 返回的xDoc却是这样的:

 图2

 图2所示结果和MSDN的Example中给的可不太一样,于是我去系统自带的“删除程序”中看了一下,如图1,原来这里的删除程序的名称是CAB包的名称加上Manufacturer的名字。这两个名称你既可以在Visual Studio创建CAB项目时候设置。编译之后,可以在CAB所在目录下找到一个inf文件,里面包含了安装信息。你可以找到AppName和Manufacturer两项察看,如下:

 

  [CEStrings]

 AppName="TestCAB"

 InstallDir=%CE1%\%AppName%

 [Strings]

 Manufacturer="Freesc"

 所以这里,我们只需要修改原程序中XML查询串为:

 

 “<wap-provisioningdoc><characteristic type=\"UnInstall\"><characteristic-query type=\"Freesc TestCAB\"/></characteristic></wap-provisioningdoc>”

 即可得到正确的返回值如下:

 图3

 比较图2和图3,只要随便解析一下这个XML返回值就可以得知某应用程序的安装情况了,比如这里我们可以判断xmlDocument.SelectSingleNode("//characteristic/characteristic")是否返回空,从而得知应用程序是否安装并允许卸载。下面的程序演示了如何卸载Test App:

 

  doc = new XmlDocument();

 string xml = @"

 <wap-provisioningdoc>

 <characteristic type=""UnInstall"" >

 <characteristic type=""Freesc TestCAB"" >

 <parm name=""uninstall"" value=""1"" />

 </characteristic>

 </characteristic>

 </wap-provisioningdoc>";

 doc.LoadXml(xml);

 ConfigurationManager.ProcessConfiguration(doc, true);

查看原文地址

0
相关文章