<< [NTD] ノータッチデプロイメントかローカル実行かの判断 | main | [WIN] 実行ランタイムの指定 >>

2006/01/13 (金)

[NTD] ノータッチデプロイメントでのパラメータ付起動

・パラメータ付き起動について
 →[Ⅰ]ローカル実行とノータッチデプロイメント実行とでコマンド引数の型式が異なる
 →[Ⅱ]ノータッチデプロイメントで引数付き実行すると
   例えば、「App1.exe」を起動すると、IEExecは対象構成ファイル「App1.exe.config」をダウンロードする。
   「App1.exe?item1=value1」を起動すると、「App1.exe?item1=value1.config」をダウンロードしようとする。
   が、実際には存在しない構成ファイルのため構成情報を取得できない。

【解決方法】
[Ⅱ]
 →①カスタムHttpHandlerを利用して、「.exe」ファイルが要求された場合、
   クエリ文字列を除いたファイル名の構成ファイルをダウンロード応答する
   ロジックを組み込む
 →②IIS設定の『構成』で「exe」拡張子に対するマッピングを設定する。
 →③Web.Configに構成を追加する。
   ①②の設定により①のクラスが動作するようになる。
[Ⅰ]
 →ノータッチデプロイメントかローカル実行かを判定して、プログラムでコマンド引数から抽出する。


001 '''カスタムHTTPハンドラのサンプル
002 Imports System.Web
003 Namespace IHTTPImple
004 Public Class ConfigFileHandler
005 Implements IHttpHandler
006 ''' --------------------------------------------------
007 ''' <summary>
008 ''' 別要求で、IHTTPHandler を使用出来るかどうか
009 ''' </summary>
010 ''' <value>論理値</value>
011 ''' <remarks>
012 ''' </remarks>
013 ''' --------------------------------------------------
014 Public ReadOnly Property IsReusable() As Boolean _
015 Implements System.Web.IHttpHandler.IsReusable
016 Get
017 Return True
018 End Get
019 End Property
020
021 ''' --------------------------------------------------
022 ''' <summary>
023 ''' カスタムHttpHandler処理
024 ''' </summary>
025 ''' <param name="context"></param>
026 ''' <remarks>
027 ''' ①ノータッチデプロイメントPG要求において、パラメータが付加されたパスが指定された場合
028 '''  「App名.exe?param1=val1…」というアプリが要求されると『App名.exe?param1=val1….config』
029 '''  という構成ファイルがダウンロード要求されるが、このファイルは実際には存在しない。
030 '''  上記のようなパラメータ付き実行ファイルが要求されても『App名.exe.config』構成ファイルを
031 '''  ダウンロードするようにする。
032 ''' </remarks>
033 ''' --------------------------------------------------
034 Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) _
035 Implements System.Web.IHttpHandler.ProcessRequest
036 Dim path As String = context.Request.PhysicalPath
037 Dim url As String = context.Request.RawUrl
038 Dim ext As String = ".config"
039 '①
040 If url.ToLower().EndsWith(ext) Then
041 context.Response.WriteFile(path + ext)
042 Else
043 context.Response.ContentType = "application/octet-stream"
044 context.Response.WriteFile(path)
045 End If
046 End Sub
047 End Class
048 End Namespace

'''web.configの設定
<system.web>
<httpHandlers>
<add verb="*" path="*.exe" type="IHTTPImple.ConfigFileHandler,ConfigFileHandler" />
<remove verb="*" path="*.config" />
<add verb="*" path="web.config" type="System.Web.HttpForbiddenHandler"/>
</httpHandlers>
</system.web>