Как установить пользовательский URL-адрес ошибки в IIS7.5 с помощью WiX - PullRequest
1 голос
/ 07 декабря 2011

Мой первый вопрос, поэтому, пожалуйста, будьте добры.У меня проблемы с моим установщиком. Это ошибка журнала установки.

MSI (s) (4C:64) [14:56:14:086]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI6E35.tmp, Entrypoint: WriteIIS7ConfigChanges
CustomAction WriteIIS7ConfigChanges returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 14:56:15: InstallFinalize. Return value 3.

Программа установки завершает работу с ошибкой и выполняет откат.Методом проб и ошибок я обнаружил проблему с конфигурацией IIS и сузил ее до настройки страницы пользовательских ошибок (пример ниже)

<iis:WebSite Id="myWebService1" Description="myWebService" AutoStart="yes" StartOnInstall="yes" ConfigureIfExists="yes" Directory="WEBAPPDIR" ConnectionTimeout="360" >
    <iis:WebAddress Id="myWebService_Bindings" IP="*" Port="9992" />
    <iis:WebApplication Id="myWebService" Name="myWebService" WebAppPool="myWebService_Pool" ScriptTimeout="360" />
    <iis:WebDirProperties Id="myWebService_Properties" AnonymousAccess="yes" WindowsAuthentication="no" DefaultDocuments="Default.ashx" Read="yes" Execute="yes" Script="yes" />
    <iis:WebVirtualDir Id="myWebService_Download" Alias="download" Directory="FILEDOWNLOADDIR">
        <iis:WebError ErrorCode="404" URL="/dostuff.ashx" SubCode="0"/>
    </iis:WebVirtualDir>
</iis:WebSite>

Я думаю, что может быть проблема с перезаписью пользовательских настроек по умолчаниюстраницы ошибок, поскольку они наследуются, хотя в IIS6 такой проблемы, похоже, нет.Я ожидал бы, что поведение WiX по умолчанию будет просто перезаписывать то, что уже было, но, похоже, это не так.Я также пытался обойти это, скопировав файл web.config с необходимым xml для пользовательской ошибки в папку загрузки, но у меня также возникает конфликт в IIS при попытке просмотреть список «Страницы ошибок».

Я был бы очень признателен за помощь.

Ответы [ 2 ]

1 голос
/ 11 января 2012

Я столкнулся с тем же самым. Я нашел ответ для этого здесь .

Он обрабатывается в файле web.config следующим образом:

<system.webServer>
    <httpErrors>
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="filePath.aspx" responseMode="ExecuteURL"/>
    </httpErrors>
0 голосов
/ 09 декабря 2011

Итак, чтобы обойти эту проблему, мне нужно было создать настраиваемое действие и программно добавить HttpError.Ниже я включил метод, который делает это.Сначала я изо всех сил пытался заставить это работать, потому что я не удалил существующий унаследованный код ошибки, прежде чем добавить свой собственный

private static void ConfigureHTTPError(long _ErrorCode, string _URL, string _SubCode, System.DirectoryServices.DirectoryEntry VDir)
{
    string searcherr = _ErrorCode.ToString() + "," + _SubCode;
    string customerr = searcherr + ",URL," + _URL;

    for (var i = 0; i < VDir.Properties["HttpErrors"].Count; i++)
    {
        if (VDir.Properties["HttpErrors"][i].ToString().IndexOf(searcherr) == 0)
        {
            //must remove the existing error code first
            VDir.Properties["HttpErrors"].RemoveAt(i);
            VDir.CommitChanges();
            VDir.Properties["HttpErrors"].Add(customerr);
            VDir.CommitChanges();
        }
    }
}

Надеюсь, это поможет, если вы столкнетесь с той же проблемойУ меня есть больше кода вокруг этого, поэтому, если вам нужна помощь, просто спросите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...