MSDN ライブラリ

スタートアップ時に IIS を構成する AppCmd.exe を使用する

更新日: 2014年10月

AppCmd.exe コマンド ライン ツールを使って、Microsoft Azure のスタートアップ時に IIS 設定を管理できます。

AppCmd.exe を使うと、構成設定にコマンド ラインから便利にアクセスすることができ、Microsoft Azure のスタートアップ タスクで利用できます。AppCmd.exe を使用して、アプリケーションとサイトに関する Web サイト設定の追加、変更、または削除ができます。AppCmd.exe の詳細については、Microsoft Technet の「AppCmd.exe」を参照してください。

スタートアップ時に AppCmd.exe を使用するには、スタートアップ タスクに適切な AppCmd.exe コマンドを追加します。

ただし、いくつかの要因が組み合わさると、スタートアップ タスクでの AppCmd.exe の使い方が単純ではなくなります。

  • スタートアップ タスクは再起動までに複数回実行できます。これは、たとえばロールの再利用時に発生します。

  • AppCmd.exe のアクションには、複数回実行するとエラーになるものがあります。Web.config にセクションを 2 回追加しようとすると、エラーが発生します。

  • スタートアップ タスクは、ゼロ以外の終了コードまたは errorlevelを返すと、失敗します。これは AppCmd.exe でエラーが発生した場合に、起きる可能性があります。

ここで挙げた理由から、多くの場合、AppCmd.exe の実行後に errorlevel をチェックして、想定どおりに AppCmd.exe が実行されたことを確認するのが賢いやり方です。たとえば、Web.config にセクションを追加しようとすると、スタートアップ タスクで errorlevel が 183 と等しいか確認できます。既に存在する Web.config セクションを追加するときに想定されるエラーは、errorlevel 183 です。Web.config のセクションは以前実行したスタートアップ タスクによって既に追加されているため、スタートアップ タスクを続行する必要があります。その他のエラー (たとえば errorlevel 5 は「アクセス拒否」) の場合は、ログに記録し、errorlevel をエラーの値に設定して、スタートアップ タスクを終了する必要があります。errorlevel 5 は、スタートアップ タスクの executionContext 属性を elevatedではなく limited にする必要があることを示している可能性があります。AppCmd.exe によって返される errorlevel は winerror.h ファイルに記載されており、MSDN の「System Error Codes」でも確認できます。

使用例

この例では、Web.config ファイルに JSON の圧縮セクションと圧縮エントリを追加し、エラー処理とログ記録を行います。

ServiceDefinition.csdef ファイルの該当セクションを次に示します。ここでは executionContext 属性を elevated に設定して、Web.config ファイルの設定を変更するのに十分な権限を AppCmd.exe に与えています。

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" />
    </Startup>

Startup.cmd バッチ ファイルは AppCmd.exe を使用して Web.config ファイルに JSON の圧縮セクションと圧縮エントリを追加します。予期される errorlevel 183 は、VERIFY.EXE コマンド ライン プログラムを使用してゼロに設定されています。予期しない errorlevel は StartupErrorLog.txt に記録されます。

REM   *** Add a compression section to the Web.config file. ***
%windir%\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1

REM   ERRORLEVEL 183 occurs when trying to add a section that already exists. This error is expected if this
REM   batch file were executed twice. This can occur and must be accounted for in a Windows Azure startup
REM   task. To handle this situation, set the ERRORLEVEL to zero by using the Verify command. The Verify
REM   command will safely set the ERRORLEVEL to zero.
IF %ERRORLEVEL% EQU 183 DO VERIFY > NUL

REM   If the ERRORLEVEL is not zero at this point, some other error occurred.
IF %ERRORLEVEL% NEQ 0 (
   ECHO Error adding a compression section to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
   GOTO ErrorExit
)

REM   *** Add compression for json. ***
%windir%\system32\inetsrv\appcmd set config  -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1
IF %ERRORLEVEL% EQU 183 VERIFY > NUL
IF %ERRORLEVEL% NEQ 0 (
   ECHO Error adding the JSON compression type to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
   GOTO ErrorExit
)

REM   *** Exit batch file. ***
EXIT /b 0

REM   *** Log error and exit ***
:ErrorExit
REM   Report the date, time, and ERRORLEVEL of the error.
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
ECHO An error occurred during startup. ERRORLEVEL = %ERRORLEVEL% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT %ERRORLEVEL%

関連項目

表示:
© 2016 Microsoft