我的第一个问题所以请善待。我的安装程序出现问题,这是安装程序日志中的错误。
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的默认行为只是覆盖已经存在的内容,但似乎并非如此。我还尝试通过将带有自定义错误的必要xml的web.config复制到下载文件夹来解决这个问题,但是当我尝试查看“错误页面”列表时,我在IIS中也遇到了冲突。
我非常感谢对此有所帮助。
答案 0 :(得分:1)
我遇到了同样的事情。我找到了答案here。
它在web.config文件中处理如下:
<system.webServer>
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="filePath.aspx" responseMode="ExecuteURL"/>
</httpErrors>
答案 1 :(得分:0)
因此,要解决此问题,我需要创建自定义操作并以编程方式添加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();
}
}
}
希望如果您遇到同样的问题,这会有所帮助。我有更多的代码,所以如果你需要帮助,请问。