ActiveXコントロールの開発とCABパッケージの作成

18550 ワード

一つのプロジェクトでActiveXコントロールを使うには、ネット上の多くの例を参照して、ActiveXコントロールは簡単にできます.それから1つの【インストールプロジェクト】をして、かえって使うことができて、ただクライアントで手動でインストールをクリックするだけで、次のステップ、次のステップ...とても爽やかではありません;また「CABプロジェクト」を試してみましたが、VS 2008でやる人はいないようで、工夫を凝らして、やっと解決策を見つけました.この経験を皆さんと共有します.開発ツール:Visual Studio 2008.NETバージョン:2.0開発言語:C#一、ActiveXコントロール1の作成、「Windowsフォームコントロールライブラリプロジェクト」の新規作成2、「ユーザーコントロール」の追加3、2つのLabelコントロールをインタフェースにドラッグ4、コントロールに前の時間を表示する方法を設定する

   
     
/// <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.html7、私达のコントロールのために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という2つのファイルは必要です.そうしないと生成に成功しません.二、ActiveX Setupインストールファイル1を作成し、インストール項目2を新規作成し、項目を右クリックし、【追加】->「項目出力」、上の項目3を選択し、インストール項目のプロパティページを開き、インストールURLを設定ここでは以下のように設定する.http://localhost/hellobossmaこのディレクトリは、クライアントがダウンロードしてインストールするために生成されたインストールファイルを格納するために実際に存在する必要があります.4、プロジェクトを生成すると、2つのファイルが生成され、1つのexeファイルと1つのmsiファイル5が生成され、次のコードがWebページに追加されます.ここでclassidはコントロールのGuidです. 

   
     
< object classid ="clsid:636B8CE1-7512-464C-B63C-FC75BDCA21DB" codebase ="hellobossma/setup.exe#version=1,0,0,0" width ="200" height ="40" id ="helloBossma" >
</
object >

   
6、インストールプロジェクトで生成したexeとmsiファイルをウェブサイトhellobossmaディレクトリにコピーする. HelloBossmaSetup.msi setup.exe 7、サイトを起動し、setupにアクセスすることを確保する.exeのディレクトリは、【インストール項目】の【インストールURL】と一致しています.8、一般的には、ActiveXコントロールをインストールするかどうかなどのプロンプトが表示されます.プロンプトが表示されてもインストールできない場合は、信頼できるサイトにWebサイトを追加し、ダウンロードが安全でないコントロールと署名されていないコントロールを許可する必要があります.コントロールの署名と認証については、ここでは説明しません.必要なものは自分で検索してください.このインストール方法を使用すると、クライアントからインストールソフトウェアのインタフェースがポップアップされ、お客様にとってあまり友好的ではありません.三、ActiveX CABインストールパッケージを作成してVSの「CABプロジェクト」テンプレートを試したが、残念ながらコントロールがなかなかインストールできず、断念.CABARCを使っている人がネットでたくさん見かけました.EXE、やってみたら、意外にも成功して、特に過程を記録しました.1、このパッケージをダウンロードして、マイクロソフトからダウンロードすることができて、住所:http://download.microsoft.com/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/cabsdk.exeこのファイルを解凍して、中に詳しい使用説明があります.2、【開始】-【実行】、「CMD」と入力、開いたコマンドプロンプト画面で、解凍後のファイルのBINディレクトリに入ります.ここでは2つのファイル:HelloBossmaSetupを追加する必要があります.msi install.infHelloBossmaSetup.msiは、上のインストール項目で生成されたインストールプログラムです. install.infは、コントロールを実行するためにダウンロードまたは提出するファイルを指定するテキストファイルです.infファイルの書く規範については、ここでは紹介しないで、必要なものがあれば自分で探してもいいです.この例ではinfファイルの内容

   
     
[ version ]
signature
= " $CHICAGO$ "
AdvancedINF
= 2.0

[ Setup Hooks ]
hook1
= hook1

[ hook1 ]
run
= msiexec.exe /i " %EXTRACT_DIR%\HelloBossmaSetup.msi " /qn

この2つのファイルがあれば、下のコマンドを実行し、成功すれば現在のディレクトリでHelloBossmaを生成します.cabファイル.3、このファイルをコントロールのダウンロードディレクトリに入れ、Webページの呼び出し方法を変更します. 

   
     
< object classid ="clsid:636B8CE1-7512-464C-B63C-FC75BDCA21DB" codebase ="hellobossma/HelloBossma.CAB" width ="442" height ="49" id ="helloBossma" >
</ object >
< input type ="button" value ="Click" onclick ="helloBossma.SetTime((new Date()).getTime())" />

ここにはボタンも追加されており、クリックするとイベントがトリガーされ、コントロールの表示時間方法が呼び出され、ボタンをクリックすると、コントロール上の時間の変化がわかります.OK、この文章はここまでで本文は終わります.C#を使用してActiveXコントロールを開発することを簡単に理解するだけです