最近用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







