ダウンロード サンプルファイル (237.3 KB)
権限昇格機能を利用したアプリケーションの作成
ここからは、実際にスタータップタスクとランタイムの権限昇格を用いたサンプルアプリケーションを作成します。
サンプルの概要
今回はサンプルアプリケーションとして、COMコンポーネントを利用します。通常の運用ならば手動で構成したりするところですが、Azureにおいて毎回手動で構成するわけにはいきません。スタートアップタスクとランタイムの権限昇格を利用して自動で構成するようにします。サンプルの手順と内容は以下の通りです。
- スタートアップタスクで32bit COMコンポーネントの登録を行います。
- ランタイムで、IISのアプリケーションプールを32bitに再構成します(注1)。Webロールのアプリケーションプールは既定で、64bitとなっており、そのままでは32bit COMコンポーネントを利用できません。
- 通常通り、COMコンポーネントを利用します。
実際に利用しているCOMコンポーネントが64bitであるならば、再構成の必要はありません。
それでは、実際にアプリケーションを作成してみましょう。
サービス構成ファイルの編集
はじめに、Windows Azureプロジェクトを作成してから、スタートアップタスクを構成するために、サービス定義ファイルを編集します。
Visual Studioを起動し、[ファイル]-[新規作成]-[プロジェクト]を選択します。Windows Azureプロジェクトを選択し[OK]ボタンをクリックします。新しいWindows Azureプロジェクト作成画面が表示されるため、ASP.NET Webロールを[OK]ボタンをクリックすると、新しいソリューションが作成されます。
引き続きソリューションエクスプローラーからサービス定義ファイル(ServiceDefinition.csdef)を選択して開きます。
サービス定義ファイルにStarup要素とRuntime要素を追加します(リスト5)。
Task要素のcommandLine属性には、実行するスクリプトファイルを指定します。executionContext属性にはelevatedを指定して管理者権限で実行、taskTypeにはsimpleを指定して同期実行させます。
同様にRuntime要素のexecutionContext属性にもelevatedを指定し、ランタイムを管理者権限で実行します。
スタートアップタスクやランタイムの構成を変更するためには、サービス定義ファイルを直接修正する必要があります。現時点ではプロパティエディタ経由の編集はサポートされていません。
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="StartupTask" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="WebRole1"> <Startup> <Task commandLine="startup.cmd" executionContext="elevated" taskType="simple" /> </Startup> <Runtime executionContext="elevated" /> ... </WebRole> </ServiceDefinition>
スクリプトファイルの追加
スタートアップタスクで起動するスクリプトファイルをプロジェクトに追加します。
Webロールのコンテキストメニューから[ファイル]-[追加]-[新しい項目]を選択し、startup.cmdファイルを追加します(図1)。
ここで指定するスクリプトファイルは、ANSI 形式で保存する必要があり、ファイルの先頭にBOM(Byte Order Mark)が設定されているファイル形式は正しく処理されないため注意が必要です。このため、[ファイル]-[保存オプションの詳細設定]から、エンコードにUTF-8シグネチャなしを選択します(図2)。他の方法としては、メモ帳などBOMが付加されないエディタでファイルを作成し、プロジェクトに取り込んでも構いません。

新規に追加したstarup.cmdファイルにリスト6を入力します。
*1は、カレントディレクトリをstartup.cmdが存在するフォルダに変更します。スタートアップタスクが実行される際のカレントディレクトリは、特に決まっているわけではないため初期化します。
*2は、regsvr32によってCOMコンポーネントの登録を行います。/sは、メッセージボックスを表示させないためのスイッチです(注2)。スタートアップタスク実行中は、対話処理ができません。ソフトウェアのインストールを行いたい場合においても、サイレントインストールになるような考慮が必要です。
*3は、スクリプトの終了コードを明示的に指定します。taskTypeがsimpleである場合、0以外の終了コードを返却すると正常にスタートアップタスクが終了せず、ロールが正常に起動しません。0以外に終了コードを返すプログラムを呼ぶときは、このように明示的に終了コードを指定する必要があるため注意が必要です。
@echo off cd /d %~dp0 *1 regsvr32 /s AzureCOMSample.dll *2 exit /b 0 *3
開発エミュレータでの実行時には、/sスイッチを付加せず実行し、メッセージボックスを表示させることにより、COMコンポーネントの登録が確実に行われていることを確認することができます。ただし、そのままAzure上に配置すると初期化が終わらずロールが正常に起動しないため注意が必要です。
スクリプトファイルは、Windows Azureに配置するパッケージに含まれるように、プロパティを常にコピーするに設定します(図4)。これによりアプリケーションルートのbinフォルダに配置されます。

この記事は参考になりましたか?
- Windows Azure新機能チュートリアル連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト statemachine(statemachine)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

