はじめに
Silverlight 4の信頼されたアプリケーションは、それまでのRIAにはない多くの機能を提供しています。前回の記事では、ローカルファイルアクセス、ポリシーファイルを必要としないネットワークアクセス、ユーザーと対話を必要としないデバイスへのアクセスについて解説しました。
今回は、引き続き信頼されたアプリケーションのネイティブ統合にスポットを当てて、解説を行っていきます。
ネイティブ統合
Silverlight 4の信頼されたアプリケーションでは、Silverlightが動作するクライアントにあらかじめインストールされたオートメーションオブジェクトを利用して、Excelを起動したり、Visual Basic 6(以下、VB6)で作成したアプリケーションをSilverlightから利用できます。
オートメーション
オートメーションは、作成したアプリケーションをスクリプトや他のアプリケーションから呼び出すための機能です。オートメーションの技術そのものは、Windows以外のOSでも利用できる技術ですが、Silverlightのネイティブ統合ではWindowsのみで利用できます。
オートメーションオブジェクトについては、次のURLで詳しく解説されています。
Sliverlightでオートメーションオブジェクトを作成するためには、System.Runtime.InteropServices.Automation.AutomationFactoryクラスのCreateObjectメソッドを利用します。オートメーションオブジェクトを作成する場合は、現在の動作環境がオートメーションをサポートしているかをIsAvailableプロパティで確認する必要があります。
もしオートメーションがサポートされない環境で、CreateObjectメソッドを使用してオートメーションオブジェクトを作成しようとすると、NotSupportedExceptionの例外が発生します。
リスト1はAutomationFactoryクラスを利用して、Excelオブジェクトを作成している例です。
// オートメーションが利用可能かを確認し、 if (!AutomationFactory.IsAvailable) return; // Excelのオートメーションオブジェクトを作成する。 dynamic excel = AutomationFactory.CreateObject("Excel.Application")
C#4.0では、dynamicキーワードを利用して、AutomationFactoryクラスのCreateObjectメソッドが返すオブジェクトに対して、動的なプログラミングを行うことができます。
dynamicキーワードを利用するためには、Microsoft.CSharp.dllへの参照が必要です。下記のアドレスから参照設定を行ってください。
- %ProgramFiles(x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\Microsoft.CSharp.dll
プログラムIDは、オートメーションとしてインストールされたプログラムに割り当てられた名前です。レジストリエディター(REGEDIT.exe)からHKEY_LOCAL_MACHINE\SOFTWARE\Classesに追加されているエントリー(図1)を調べることで確認できます。
Visual Studio 2010をインストールしている場合は、OLE/COM Object Viewer(図2)でも確認できます。
CreateObjectメソッドで指定する、代表的なプログラムIDを表1に示します。CreateObjectメソッドで、クライアントにインストールされていないプログラムIDを指定した場合、System.Exceptionの例外が発生します。
プログラムID | 生成されるオートメーションオブジェクト |
WbemScripting.SWbemLocator | WMI(Windows Management Instrumentation) |
WScript.Shell | WSH(Windows Scripting Host) |
Scripting.FileSystemObject | ファイルシステム |
Excel.Application | Excel |
Word.Application | Word |
ADODB.Connection | ADOのデータベースコネクション |