最近用VS2005的打包程序对一个Web程序进行打包,在Win7系统中进行安装,总是出错错误,直接双击安装程序,就弹出:
在Xp的机器上安装是好的,换另外一台Win7的机器,进行安装,竟然也是好的。由此证明,安装程序肯定是没有问题,有可能是两台机器的设置不同而导致的。但是它又没报具体是什么错误导致的。只好在Windows的系统日志中去找,幸好有相关的记录。
找到来源为“MsiInstaller”的那条信息,双击
看到上面显示“安装成功或错误状态:1603”,和其他电脑上安装成功的消息一对比,发现安装成功的返回的是0而不是1603,好,那就在网上搜索安装时返回1603的错误。
结果别人说这个错误是一个非常抽象的错误,在安装过程中遇到很多问题后都会返回这个错误,根本不具体。最后找到一个外国人的文章,说是启动一下安装程序的日志,你安装的时候,就会在C:\Users\用户名\AppData\Local\Temp中生成一个msi*.log的日志文件。查看这个日志文件,里面有详细的记录。
一般的电脑在默认的情况下,并不会去记录这个日志文件,需要修改注册表的选项,启动附件中的“命令提示符”,运行以下命令
1: reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer" /v Debug /t REG_DWORD /d 7 /f
2:
3: reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer" /v Logging /t REG_SZ /d voicewarmupx! /f
4:
然后重新启动你的安装程序,它肯定还是有错误,不能安装,不过不要紧,你再查看你的C:\Users\用户名\AppData\Local\Temp中,就会生成一个msi*.log的日志文件。例如,我的电脑上生成的是下面的日志文件:
打开这个日志文件。查找“return value 3”,如果是中文的操作系统,就查找“返回值 3”,找到后,查看这句话,上面的几行,那里就是具体的错误信息。
我的上面报的错误是
SetTARGETSITE CustomAction WEBCA_SetTARGETSITE returned actual error code 1603
我就搜索这个错误,在这个网站http://social.msdn.microsoft.com/Forums/zh-CN/winformssetup/thread/a62d76f1-1b1f-4609-8779-555cac8329f4找到了一个答案
解决方法就是把IIS设置成兼容IIS6.我们知道win7系统中的IIS都是7.0及以上版本,我是用VS2005进行打包的,又因为是Web程序,所以它可能需要在IIS6兼容的模式下进行工作。
我尝试一下,在控制面板中,打开“添加或删除Windows功能”,用两台电脑进行对比,发现,果然能成功安装的电脑中,已经设置了IIS6兼容,不能成功安装的没有设置。我在那台安装失败的电脑上进行了设置,让它兼容IIS6,打上勾即可。
再重新安装应用程序,安装成功。问题顺利的解决。
需要注意的问题:
1. 大家在查看日志文件的时候,会发现里面有这样的语句:
VSDNETURLMSG = 此安装程序需要 .NET Framework 版本 2.0.50727。请安装该 .NET Framework 版本,然后重新运行此安装程序。可以从 Web 获得 .NET Framework。要立即做此事吗?
Property(C): VSDIISMSG = 此安装程序需要 Internet Information Server 4.0 或更高版本,以及 Windows NT 4.0、Windows 2000 或更高版本。此安装程序无法安装在 Windows 95、Windows 98 或 Windows Me 上。请安装 Internet Information Server,然后重新运行此安装程序。
Property(C): VSDUIANDADVERTISED = 不会安装该公布应用程序,因为它可能不安全。请与管理员联系将程序包的安装用户界面选项更改为基本。
Property(C): VSDNETMSG = 此安装程序需要 .NET Framework 版本 2.0.50727。请安装该 .NET Framework 版本,然后重新运行此安装程序。
Property(C): VSDINVALIDURLMSG = 指定的路径 '[2]' 不可用。Internet Information Server 可能并未运行或者是路径已重定向到另外的计算机。请检查 Internet Services Manager 中虚拟目录的状态。
有很多人就误以为是FrameWork的版本不对,我发现,就算是成功安装,它的日志文件里面也会出现这些信息,这就证明,这不是错误的原因。所以大家在找错误的时候,记得一定要去查找“reutrn value 3”的前面几行,或者是“返回值 3”的前面几行,这才是真正的错误的地方。
2.为了让系统记录安装的日志文件,我们修改了注册表,增加了两个键,用完之后,如果你怕以后产生一些不必要的垃圾日志文件,最后是把这两个键给删掉,以后不让它记录日志文件,删除的方法是,运行以下命令
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer" /v Debug /f
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer" /v Logging /f
参考文章:
http://blogs.msdn.com/b/astebner/archive/2005/03/29/403575.aspx
http://blogs.msdn.com/b/astebner/archive/2008/02/27/7927123.aspx