3

誰かがIISスクリプトマップをWixインストールに正常に追加しました。私はこれを使用しています:

  <CustomAction Id="AddHandlers_Cmd" Property="AddHandlers" Value="&quot;[SystemFolder]inetsrv\appcmd&quot; set config -section:system.webServer/handlers /+&quot;[\[]name='GSOAP',path='*.dll', verb='*',modules='IsapiModule',scriptProcessor='[BIN]mod_gsoap.dll',resourceType='File', requireAccess='Execute'[\]]&quot;" Execute="immediate"/>
  <CustomAction Id="AddHandlers" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>

ただし、Webアプリケーションから404エラーが発生し、アプリケーションのインストール後にスクリプトマップを手動で追加すると、完全に機能します。誰かがこれをどのように行ったかを共有できれば幸いです。

4

3 に答える 3

0

私は GSOAP ハンドラーを使用したことはありませんが、ASP.NET ISAPI 拡張機能を使用しました。基本的には同じレベルの統合を持っていると思います。ASP.NET のコードを投稿します。GSOAP への変更に問題がないことを願っています。何かを誤って変更して、例を使用できなくする大きなリスクがあるため、より適切に変更できるようにします。

そうでない場合に拡張機能自体を登録するコードは次のとおりです

<Component Id="Iis6ConfigExtentions" Guid="{GuidHash({ProductId}-1822E4F3-5850-47D5-9281-D1E0E20C77D4)}" KeyPath="yes" Permanent="yes">
    <Condition><![CDATA[Installed OR (IISMAJORVERSION AND (IISMAJORVERSION = "#6"))]]></Condition>
    <iis:WebServiceExtension Id="ExtensionASP4" Group="ASP.NET v4.0.30319" Allow="yes" File="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" Description="ASP.NET v4.0.30319"/>
</Component>

@Yan が既に述べたように、それらを具体的なサイトに追加するには、WebApplicationExtention を使用する必要があります。

<iis:WebApplication Id="IIS6WebApp" Name="[SITE_APP_NAME]" WebAppPool="AppPool" >
  <iis:WebApplicationExtension Verbs="GET,HEAD,POST" CheckPath="no" Script="yes" Executable="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" />
</iis:WebApplication>

CheckPath="no"URL をディスク上のファイルにマップしない ASP.NET MVC を使用するため、IIS 6 ではこれが必要です。サービスアドレスはおそらく物理ファイルにマップされないため、それも必要になる場合があります。

アップデート:

WIXで直接実行することは実際には不可能のようです(少なくとも3.5バージョンでは)。あなたは正しい方向に進んでいます-appcmdを使用したカスタムアクション。しかし、提供されたカスタム アクションは完全ではなく、必要なものでもありません。最初のアクションは、実行する必要があるコマンドにプロパティ値を設定するだけで、2 番目のカスタム アクションは、提供されていない Dll カスタム アクションを呼び出します。

私が実行しようとしているのは次のとおりです。

<CustomAction Id="AddGsoapHandler" Directory="TARGETDIR" Impersonate="no" Execute="deferred" Return="check" ExeCommand="[SystemFolder]inetsrv\appcmd.exe set config -section:system.webServer/handlers /+&quot;[\[]name='GSOAP',path='*.dll', verb='*',modules='IsapiModule',scriptProcessor='[BIN]mod_gsoap.dll',resourceType='File', requireAccess='Execute'[\]]&quot; /commit:apphost" />

ハンドラー構成のパス属性に注意してください。ハンドラーの使用を「.dll」で終わる URL のみに制限します。コードからコピーしましたが、意図的に行ったのか、Microsoft サイトのからコピーしただけなのかはわかりません。ハンドラーが正常に登録されていても、401 エラーが発生した可能性があります。

/commit:apphostまた、引数を追加しました。これが本当に必要かどうかはわかりませんが、アプリケーションの構成を構成する必要があることを明示的に指定するために使用します。

更新 2:

単一のアプリケーションのみに構成を設定する必要がある場合は、グローバル構成を意味する「config」の代わりに、アプリケーション オブジェクトを appcmd の引数として指定する必要があります。これを試してください:

<CustomAction Id="AddGsoapHandler" Directory="TARGETDIR" Impersonate="no" Execute="deferred" Return="check" ExeCommand="[SystemFolder]inetsrv\appcmd.exe set app "MySite/app1" -section:system.webServer/handlers /+&quot;[\[]name='GSOAP',path='*.dll', verb='*',modules='IsapiModule',scriptProcessor='[BIN]mod_gsoap.dll',resourceType='File', requireAccess='Execute'[\]]&quot; /commit:apphost" />

詳細については、このチュートリアルを参照してください。

于 2013-04-10T15:53:11.577 に答える