使用.net framework 2.0用c#編寫ActiveX控制項(編寫,部署,升級更新)

來源:互聯網
上載者:User
轉:http://blog.csdn.net/binwind/archive/2006/05/11/724890.aspx

大概在1個半月前,自己探索了一下如何使用C#在.net 2.0 framework下編寫ActiveX的東西。發現中文資料不多,而且被大家廣為轉載的中文資料還有錯誤(不知道是否是因為net 2.0和1.0有出入的關係)。最近Lori又要做相關方面的工作。所以也就算寫上一個書面的東西以便他的參考,而且也算是對以前的工作的總結。免得忘記了。
本文包括了如何編寫,部署,還有更新ActiveX控制項

國內廣為轉載的那篇介紹如何使用C#的程式的文章的出處就是:
http://www.cnblogs.com/homer/archive/2005/04/01/86473.html(一共三篇)
還有一個中文的說明
http://www.dvpx.com/index_article_display.aspx?Fid=10&id=74
我也是從這一個文章作為起點的。可是這邊文章在ActiveX包的發布一部分說的不是很全面。而且更加關鍵的是不知道是因為.net framework版本的原因還是因為作者的疏忽。裡面關於一個Com口的聲明有錯誤。

首先指出錯誤的地方:
在文章中IObjectSafety的聲明如下
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {
        // methods
        void GetInterfacceSafyOptions(
            System.Int32 riid,
            out System.Int32 pdwSupportedOptions,
            out System.Int32 pdwEnabledOptions);
        void SetInterfaceSafetyOptions(
            System.Int32 riid,
            System.Int32 dwOptionsSetMask,
            System.Int32 dwEnabledOptions);        
    }
 

可是這樣的聲明並不能起到相應的作用。介面聲明出錯。正確的聲明見如下網頁
http://www.pinvoke.net/default.aspx/Interfaces/IObjectSafety.html

其次還有所一下關於CAB包部署方面的步驟

其中文章裡面的
[hook1]
run= msiexec /i %EXTRACT_DIR%\ActiveXInstaller.msi /qn
這個就是在Cab包解壓縮後自動啟動並執行檔案。

從網上查詢來看,絕大部分的ActiveX Cab包的部署都是通過C++所寫的Dll來作為示範的,而C#同C++寫成的Dll還是有所區別的。
下面是一個我參考過的老外說的關於部署的例子
http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,df3f1be8-62bc-491c-935e-570ebfe53164.aspx

現在說說我的想法

我知道的部署方式有兩種。
第一種比較麻煩,就是使用regasm命令來部署
比較熟悉部署C++的ActiveX的人都知道regsvr32是註冊c++寫的ActiveX包的命令。而regasm則是註冊在.net Framework下編寫的ActiveX的命令。具體的步驟就是在上面的Cab1中文
run= regasm/i %EXTRACT_DIR%\xxxx.dll /codebase  (xxxx.dll為打包進入的dll檔案)
(方式和部署C++寫的ActiveX的Dll差不多,只是把regsvr32命令替換成為regasm)

第二種也是比較好的(包括未來的更新)就是使用VS內建的安裝程式進行安裝
具體思路如下
在ActiveX的Solution中加入一個Setup Project工程,添加一個Project OutPut把ActiveX的工程加入該Project OutPut中。之後Register屬性應該為True
這個時候就可以產生一個安裝檔案。
在打包CAB包中應該把Setup Project產生的打封裝入msi檔案打包放入Cab包中而且編寫其inf檔案
如何製作CAB包的串連
http://blog.joycode.com/felix/articles/32905.aspx
Cab包的格式
http://msdn.microsoft.com/library/default.asp?url=/workshop/delivery/download/overview/infarchitecture.asp?frame=true
這個是其中的例子,還是老外寫的

接下來是更新。用C#寫的ActiveX的問題在於註冊後所看見的ActiveX版本號碼也正是.net Framework的版本號碼,而不是Dll檔案的版本號碼。所以用原來的ActiveX更新方式有問題。不過可以正好利用Setup Project的更新方式。進行更新。

把Setup Project的RemovePreviousVersion屬性設定為True這樣。自動刪除之前的版本。Setup Project是用一個GUID來標示是否是同一個SetUP Project。(注不是ActiveX的GUID)。所以在寫了新的版本的時候。需要更新用戶端的ActiveX可以使用如下步驟
1.改變ActiveX的GUID(不是Setup Project)的GUID。
2.提升Setup Project的版本號碼。
3.改變網頁中的ActiveX的classid為新的ActiveX的ID

這個時候。當使用者登陸網頁時就會因為發現了新的ActiveX控制項提示下載(GUID改變)。而下載後的安裝程式使用Setup Project的GUID發現已經安裝了舊版本。先卸載舊的安裝版本。再卸載就安裝版本的時候。已經自動地把久的ActiveX給登出了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.