如何通過CSP編程卸載Windows Mobile應用程式

來源:互聯網
上載者:User

 

如何通過CSP編程卸載Windows Mobile應用程式

黃季冬

http://fox23.cnblogs.com/

摘要

  和Windows PC一樣,Windows Mobile中也提供了刪除應用程式的控制台項,但是有時候我們需要在程式中去卸載另外的程式,或者卸載應用程式本身,這樣的情況在企業級應用裡十分常見。這時需要用到系統佈建服務檔案CSP(Configuration Service Providers)。本文介紹了如何使用CSP在程式中卸載Windows Mobile上安裝的應用程式。 

 

最簡單的解決方案

    如果不使用CSP,可以在程式中調出系統內建的刪除程式的控制台項,1

圖1

這種方式比較簡單,下面的代碼實現了這個功能: 

Code
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = @"\Windows\ctlpnl.exe";
        startInfo.Arguments = "cplmain.cpl,10";
         Process.Start(startInfo);

關於如何調用系統內建的控制台可參考這篇文章:

http://www.cnblogs.com/fox23/archive/2008/11/14/showing-windows-mobile-control-panel-programmatically.html 

CSP簡介 

  雖然上面這種丟給使用者一個標準介面的方法很簡單,但它不能在程式中直接控制刪除特定的程式。如果你是公司的IT管理員,我想你應該不會讓這種情況發生,這時就需要用到CSP了。那什麼是CSP呢?CSP(Configuration Service Providers)是一組通過XML來查詢和修改系統設定的介面。這裡的XML檔案我們把它叫做OMA Client Provisioning (WAP-based) XML File。Windows Mobile上面目前對CSP的支援情況可查閱本文:

http://msdn.microsoft.com/en-us/library/bb737536.aspx

Windows Mobile為投遞類似WAP-PUSH的CSP XML檔案提供了編程介面:

HRESULT DMProcessConfigXML(

  LPCWSTR pszWXMLin,

  DWORD dwFlags,

  LPWSTR* ppszwXMLout

);

該函數定義在標頭檔Cfgmgrapi.h中。

下面的例子示範了如何通過CSP添加一個IE收藏夾項:

 

Code
//定義XML provision file
LPCWSTR g_wszFavoriteXml = 
    L"<wap-provisioningdoc> "
    L"   <characteristic type=\"BrowserFavorite\"> "
    L"      <characteristic type=\"CNBlog\"> "
    L"         <parm name=\"URL\" value=\"http://www.cnblogs.com//> "
    L"      </characteristic> "
    L"   </characteristic>"
    L"</wap-provisioningdoc>";
 
HRESULT AddFavorite()
{
    HRESULT hr         = E_FAIL;
    LPWSTR wszOutput   = NULL;
    hr = DMProcessConfigXML(g_wszFavoriteXml, CFGFLAG_PROCESS, &wszOutput);

    // 刪除這裡沒用到的傳回值,它仍是一個XML串
    delete [] wszOutput;

    return hr;
}

在Windows Mobile 5以後的裝置中也提供了這個方法的託管封裝,即ConfigurationManage類的ProcessConfiguration靜態方法。

使用CSP來刪除特定的應用程式

 

     首先,需要查詢該應用程式能否被刪除,實際上我們在通過Visual Studio製作安裝包(CAB)的時候會有這個選項,也就是說你可以讓你的程式是不可被刪除的(不可通過系統的刪除程式來刪除)。這裡,通過CSP我們同樣只能卸載那些允許被卸載的程式。MSDN裡面給了一個例子,用來查詢能被刪除的程式,我們的程式可以參考這個例子入手。我預先隨便建立了一個Smart Device CAB項目,命名叫”TestCAB”。參考例子,容易寫出C#代碼如下:

 

Code
            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:

Code
            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);

 

編寫自己的應用程式管理器

 瞭解了上述內容,你也可以輕鬆的編寫出你自己的應用程式管理器了, 下面是一個簡單的樣本, 代碼在後面的連結中下載:

 

完整的代碼:點此處下載

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.