一個項目要用到ActiveX控件,參照網上眾多的例子,ActiveX控件倒是很容易就搞出來了;
然後做了一個【安裝項目】,倒是可以使用,只不過需要在客戶端手動點擊安裝,下一步,下一步…覺得不是很爽;
又試了試【CAB項目】,好像沒人用VS2008來做,費了點功夫,終於找到解決辦法。
特將此經驗與大家分享。
開發工具:Visual Studio 2008
.NET版本:2.0
開發語言:C#
一、編寫ActiveX控件
1、新建一個【Windows窗體控件庫項目】
2、添加一個【用戶控件】
3、拖兩個Label控件到界面上
4、為控件添加一個方法,用來設置在Label中顯示當前時間
/// <summary>
/// 設置當前時間
/// </summary>
/// <param name="timeStr"></param>
public void SetTime(string timeStr)
{
this.label2.Text = timeStr;
}
5、新建一個接口:
據說實現該接口的目的就是提高程序的安全性,以便客戶端IE在不更改設置的情況下可以預行該ActiveX控件。
關於這個有篇文章,推薦大家看看:
http://blog.csdn.net/optman/archive/2007/07/18/1698070.aspx
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace HelloBossma
{
[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
[PreserveSig]
int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);
[PreserveSig()]
int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
}
}
6、讓我們的控件實現這個接口
關於實現這個接口,篇幅較長,可以在這篇文章找到:
http://www.pinvoke.net/default.aspx/Interfaces/IObjectSafety.html
7、為我們的控件添加Guid、ProgId和ComVisible屬性
namespace HelloBossma
{
[Guid("636B8CE1-7512-464C-B63C-FC75BDCA21DB"), ProgId("HelloBossma.HelloBossmaActiveX"), ComVisible(true)]
public partial class HelloBossmaActiveX : UserControl, IObjectSafety
{
...
}
}
8、打開項目屬性,在生成裡邊,勾選【為Com互操作注冊】
9、生成項目,進入到binRelease目錄下可以看到
HelloBossma.dll
HelloBossma.tlb
這兩個文件時必須的,否則生成不成功。
二、制作ActiveX Setup安裝文件
1、新建一個安裝項目
2、在項目上點右鍵,【添加】->【項目輸出】,選擇上邊的項目
3、打開安裝項目的屬性頁面,設置安裝URL
這裡設置為:http://localhost/hellobossma
這個目錄必須是實際存在的,用來存放生成的安裝文件,供客戶端下載安裝。
4、生成項目
會生成兩個文件,一個exe文件和一個msi文件
5、新建一個網站,添加如下代碼到網頁中。
其中classid即為控件的Guid。