如何簡單部署用VSTO SE 2005開發的Excel,Word插件
本文標題之所以要加上簡單二字,是為了區別於msdn上的兩篇講述VSTO部署的經典長文。
http://msdn2.microsoft.com/en-us/library/bb332051.ASPx
http://msdn2.microsoft.com/en-us/library/bb332052.ASPx
其實VSTO插件的部署無非就是Prerequisites和grant full trust (因為注冊表是模板幫我們處理好的,我們不需要去關心,下文有詳述)。上面的兩篇文章為了一步到位的解決好以上兩個問題,並打包.msi文件,用了一些技術。一,給Setup項目添加prerequisites,並且使用launch condition來要求用戶在安裝setup.exe前必須保證所有的prerequisites都已經安裝在目標機器上;二,利用Custom Action在安裝過程完成後,調用cASPol工具來設置程序集的權限。
第一篇文章講解了各個技術點,第二篇文章通過具體的例子來完成兩種類型項目的部署,並且提供了一個Sample,裡面包含了要用到一些工程,如SetSecurity。例子就是引用這個工程做為Custom Action來設置權限的。
與上兩者不同的是,本文拋開所有這些技術不看,僅僅打包一個最最簡單的.msi文件,把prerequisites和grant trust的事情,留待插件安裝完再去人工做。希望如此,能給在VSTO項目部署時遇到困難的人一個直觀的印象,讓大家看到VSTO項目要運行,其實就是這麼幾個東西。然後回頭再看Microsoft提供的這兩篇文章,幸許又會有另外的收獲。
一.概述
如果你的VSTO SE插件在開發機器上工作良好,一旦裝到客戶機上,就不再裝載了。可能的原因無非就是一下幾種:(在此排除了軟禁用,硬禁用的情況)
1.一些prerequisites沒有裝:
a. .Net Framework (這是所有.Net應用程序運行的必備,沒有什麼好說的。如果我們用VSTO SE開發的插件,我們應該在客戶機上裝上.Net 2.0以上的版本)
b. Office PIAs(這是連接.Net和Office COM的橋梁,CLR通過它來操作Office的COM對象,沒有它,你的程序一樣不能跑)
c. VSTO Runtime(這是所有用VSTO開發出來的軟件,運行時必備的,目前有三個主本版,第三個版本用來支持ClickOnce部署,本文中不涉及。本文只用到第二個主版本的升級版)
2. 注冊表,任何一個VSTO SE插件程序要運行,都是Office啟動的時候先從注冊表中找到插件的相關信息,主要是LoadBehavior和Manifest的地址,然後根據Manifest的地址,找到manifest文件,manifest文件中記錄了dll的地址和一些配置信息 (manifest文件可以用notepad打開) ,根據manifest來裝載程序集。我們用VSTO SE新建一個插件項目的時候,Microsoft提供給我們的模板會幫我們自動添加一個Setup項目。這個項目中已經默認地幫我們把要寫入的注冊表鍵值寫好,無須我們多費心思。當然如果你把默認的Setup項目刪掉了 (我經常這麼干,因為看著礙眼,並且我一般只要Debug,不要Deploy),自己再添加一個新的Setup項目,這時候,新項目中,系統不會幫你寫好注冊表的鍵值。關於注冊表,下面是默認Setup項目的注冊表視圖的截圖:
3. 權限的設置問題,Office裝載任何VSTO SE開發出來的.Net插件時,都需要這個插件被完全信任。有兩種方法完成這個任務:
a. 用Microsoft .Net Framework Wizard (圖形化界面)
b. 用CASPol.exe (命令行,本文采用這種方式,原因是好表述,不要圖)
二.部署案例
下面我們動手,用VSTO SE創建一個Excel 2007的插件(2003也是一樣的,只不過客戶機要裝Excel 2003和Excel 2003 PIA,還有不要在同一台機器上同時安裝Office 2003和2007),並且將它部署到一個客戶機上。(由於手頭只有英文版VS,菜單名都是英文的,大家自己對應看看吧)
1. 打開Visual Studio 2005,新建項目,在左邊的導航板塊中,選中C#->Office->2007 Add-ins,在右邊選中Excel Add-in。取名ExcelAddIn,點OK。
然後系統會在solution中默認的創建兩個項目,一個是插件項目,一個是Setup項目,如圖:
2. 在ThisAddIn.cs文件中的ThisAddIn_Startup函數裡加一句代碼,以供回頭測試是否部署成功。修改後的代碼如下:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
#region VSTO generated code this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
#endregion
MessageBox.Show("Deploy successfully");
}
3. 在Solution Expolrer裡面,右擊ExcelAddInSetup項目,點擊Build。
4. 到Setup項目文件夾中的debug目錄下找到ExcelAddInSetup.msi文件,拷貝到目標機器上。
5. 在目標機器上,安裝:
.Net Framework 2.0 http://www.microsoft.com/downloads/details.ASPx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en
Office 2007 PIAs: (運行完下載文件後,還要點擊得到的o2007PIA.msi才是安裝PIAs)
http://www.microsoft.com/downloads/details.ASPx?familyid=59DAEBAA-BED4-4282-A28C-B864D8BFA513&displaylang=en
VSTO Runtime2.0:
http://www.microsoft.com/downloads/details.ASPx?FamilyId=4468D8CB-B43E-4B09-82F6-8BA3F7B5E935&displaylang=en#filelist
還有目標機上要有對應的Office程序,比如這裡就需要Excel 2007!
6. 雙擊剛剛拷貝到目標機器上的ExcelAddInSetup.msi,選擇安裝目錄並安裝,假設安裝到了C:\Test目錄下。安裝完,該目錄下會出現兩個文件:ExcelAddIn.dll,ExcelAddIn.dll.manifest,其中的.dll文件就是我們下面要設置權限的程序集
7. 回到桌面,點擊開始->運行,輸入cmd,在命令行提示下,輸入cd C:\Windows\Microsoft.Net\Framework\v2.0.50727,回車
然後輸入下面命令:
CASPol –u –ag All_Code –url “C:\Test\ExcelAddIn.dll” FullTrust –n “Test”
回車
輸入yes
回車 (請勿直接拷貝這段命令行,因為Word好像改變了字體,大家還是自己敲一下,順帶加深一下印象)
8. 打開Excel,MessageBox對話框跳出。