Настройка нескольких пользовательских сообщений об ошибках IIS в InstallShield 2009

Как настроить пользовательские сообщения об ошибках HTTP на веб-сайте, установленном InstallShield 2009?

Это выглядит обманчиво просто. Существует представление служб IIS, в котором мы можем создавать объекты веб-сайтов или виртуальных каталогов, и одна из вкладок для этих объектов выглядит так, как будто она позволяет нам настраивать сообщения об ошибках HTTP.

Это даже работает, чтобы сбросить 1 или 2 сообщения об ошибках, но когда я пытаюсь сбросить все сообщения об ошибках HTTP, это терпит неудачу.

В частности, это таблица ISIISCommon в моем проекте InstallShield (формат файла XML):

<table name="ISIISCommon">
    <col key="yes" def="s72">ISIISCommon</col>
    <col def="S72">ISIISCommon_Parent</col>
    <col def="L255">DisplayName</col>
    <col def="s50">RootDir</col>
    <col def="i4">Attributes</col>
    <col def="L255">DefDoc</col>
    <col def="I4">SessionTimeout</col>
    <col def="I4">ScriptTimeout</col>
    <col def="S255">AnonyUserName</col>
    <col def="S255">AnonyPasswrd</col>
    <col def="S0">CustomErrors</col>
    <col def="L255">AppName</col>
    <col def="S72">SSLCert</col>
    <col def="L72">AppPool_</col>
    <col def="S255">Aspversion</col>
    <col def="S255">SslPassword</col>
    <col def="S255">HostHeaderName</col>
    <row><td>ISIISCommonVRoot</td><td>ISIISCommonWebsite1</td><td>##ID_STRING121##</td><td>WEB</td><td>25873</td><td>Index.html</td><td>20</td><td>90</td><td/><td/><td>400,*,URL,CustomError.html;401,1,URL,CustomError.html;401,2,URL,CustomError.html;401,3,URL,CustomError.html;401,4,URL,CustomError.html;401,5,URL,CustomError.html;403,1,URL,CustomError.html;403,10,URL,CustomError.html;403,11,URL,CustomError.html;403,12,URL,CustomError.html;403,13,URL,CustomError.html;403,14,URL,CustomError.html;403,15,URL,CustomError.html;403,16,URL,CustomError.html;403,17,URL,CustomError.html;403,2,URL,CustomError.html;403,3,URL,CustomError.html;403,4,URL,CustomError.html;403,5,URL,CustomError.html;403,6,URL,CustomError.html;403,7,URL,CustomError.html;403,8,URL,CustomError.html;403,9,URL,CustomError.html;404,*,URL,CustomError.html;405,*,URL,CustomError.html;406,*,URL,CustomError.html;407,*,URL,CustomError.html;412,*,URL,CustomError.html;414,*,URL,CustomError.html;500,*,URL,CustomError.html;500,100,URL,CustomError.html;500,12,URL,CustomError.html;500,13,URL,CustomError.html;500,15,URL,CustomError.html;501,*,URL,CustomError.html;502,*,URL,CustomError.html</td><td>##ID_STRING127##</td><td/><td>##ID_STRING31##</td><td/><td/><td/></row>
</table>

Как вы можете заметить, я попытался установить все ошибки HTTP в моем виртуальном каталоге для перенаправления на страницу CustomError.html. Также обратите внимание, что хранение этой информации внутри элемента TD, а не в его собственной таблице TABLE, является ошибочным, особенно в мире InstallShield/Windows Installer.

Это не работает на разных уровнях.

Прежде всего, вот журнал установки,

    MSI (s) (60:14) [12:28:49:025]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI72A0.tmp, Entrypoint: CreateIISVRoots
    InstallShield 12:28:49: User legacy object preference is the following: 1 . This is based on the value of the following property: IISPREFERLEGACYOBJECTS
    InstallShield 12:28:49: InitIISObject
    InstallShield 12:28:49: CreateAppPoolFunction
    InstallShield 12:28:49: OpenKeyLog, pszMDPath =/LM
    InstallShield 12:28:49: AddKey, pszMDPath = /W3SVC/AppPools/MyAppPool
    InstallShield 12:28:49: OpenKeyLog, pszMDPath =/LM/W3SVC/AppPools/MyAppPool
    InstallShield 12:28:49: getvaluelog
    InstallShield 12:28:49: SetVRtStrProperty for property '1002' with value 'IIsApplicationPool' and strSubPath '/'.
[zip]
    InstallShield 12:28:49: SetVRtStrProperty for property '6006' with value 'Index.html' and strSubPath '/'.
    InstallShield 12:28:49: SetData, pszMDPath = /
    InstallShield 12:28:49: SetVRtDelimMultiszProperty for property '6008' with value '400,*,URL,CustomError.html;401,1,URL,CustomError.html;401,2,URL,CustomError.html;401,3,URL,CustomError.html;401,4,URL,CustomError.html;401,5,URL,CustomError.html;403,1,URL,CustomError.html;403,10,URL,CustomError.html;403,11,URL,CustomError.html;403,12,URL,Cus'.
    **InstallShield 12:28:49: SetVRtMultiszProperty for property '6008' and value '400,*,URL,CustomError.html' with length '522'**.

Судя по всему, не нравится, что 522 символа используются для описания пользовательских ошибок. В IIS использовались только первые 259 символов, поэтому правильно была настроена лишь небольшая часть пользовательских ошибок, последняя из которых была грубо неверной (в результате URL-адрес пользовательской ошибки для 403.12 был "cus").

Есть ли способ обойти это ограничение?

1 ответ

Решение

Я переименовал страницу CustomError из CustomError.html в ce.htm. Это сэкономило место, но этого оказалось недостаточно. Большим хранителем буфера символов был старый добрый *. Вместо

401,1,URL,CustomError.html;401,2,URL,CustomError.html;...;401,13,CustomError.html;401,2,URL,CustomError.html

Я заканчиваю тем, что использую:

401, *, FILE, ce.htm;

А вот так выглядит строка виртуального каталога в таблице ISIISCommon:

    <row><td>ISIISCommonVRoot</td><td>ISIISCommonWebsite1</td><td>##ID_STRING121##</td><td>WEB</td><td>25873</td><td>Index.html</td><td>20</td><td>90</td><td/><td/><td>400,*,FILE,ce.htm;401,*,FILE,ce.htm;403,*,FILE,ce.htm;404,*,FILE,ce.htm;405,*,FILE,ce.htm;406,*,FILE,ce.htm;407,*,FILE,ce.htm;412,*,FILE,ce.htm;414,*,FILE,ce.htm;500,*,FILE,ce.htm;501,*,FILE,ce.htm;502,*,FILE,ce.htm</td><td>##ID_STRING127##</td><td/><td>##ID_STRING31##</td><td/><td/><td/></row>

Это может не подходить для всех сценариев (что, если кто-то хотел бы иметь разные ошибки клиентов для 401.1 и 401.2?).

Кроме того, мне пришлось внести это изменение непосредственно в файл проекта InstallShield XML, поскольку графический интерфейс пользователя этого не понимал (и все же делает, даже если он загружает проект и правильно его создает, вкладка "Пользовательские ошибки" - беспорядок, Я просто сбрасываю со счетов специализированные записи DEFAULT или suberror, их нет в результирующем файле MSI, или это так говорит Орка).

Я также перешел от URL к файлу, так как последний кажется более ортогональным к аутентификации.

Было бы здорово прочитать лучшее решение, и я все еще удивляюсь, почему в таком мире таблиц кто-то думал, что будет хорошей идеей хранить такую ​​таблицу.

Другие вопросы по тегам