這篇文章背後有個悲慘故事,微軟在11/30釋出了VS2015 Update 1,隔天我就迫不及動手要升級,最後卻足足花了四天,晚上開夜車研究,清晨四點多想到點子爬起來繼續射茶包(沒搞定睡不著,射手的宿命 orz),直到剛剛才正式把VS2015U1裝好~

小小的升級安裝搞成天堂路,內情自然不單純,別擔心,我的痛苦遭遇源自系統環境特殊,大家應不會遇到。但網路上看到很多人抱怨Visual Studio 2015安裝很慢,一裝數小時,停在某個安裝項目久久沒進展,搞不清楚是當掉還是安裝中?不知道該耐心等候還是果決中斷不浪費生命?有鑑於我可能是全台灣安裝VS2015 Update 1次數最多的記錄保持人,過程搞懂一些Visual Studio安裝原理跟偵錯技巧,抱著捨我其誰的精神,分享偵察VS2015安裝卡住問題的小技巧。

Visual Studio的安裝方式有兩種,網路安裝或安裝光碟(VS2015U1的安裝媒體高達5.89GB,已超過普通DVD的容量,通常都是下載後掛成虛擬光碟機)。網路安裝檔很小,只有737KB,會依你勾選的安裝項目下載安裝檔回來。第一次使用網路安裝失敗後,無法釐清是網路問題還是安裝錯誤,決定由MSDN下載光碟檔,排除網路下載因素。之後還是歷經安裝特定項目卡住不動,等數小時也無進展的狀況。學會看Log後才知道,某些時候該項目的安裝程式早已出錯中止,是Visual Studio安裝程式未接到通知才讓使用者傻等,這種情況等到海枯石爛也不會有結果的… orz

要區別Visual Studio是在安裝中還是已經當掉卡死,Log檔是最好的觀察指標。開啟檔案總管,輸入"%TEMP%"進入暫存資料夾,安裝VS時應該要看到一堆dd_vs_*_yyyyMMddHHmmss_****.log檔案。

用修改日期排序,健康的安裝過程應該要一直冒出新檔案,再不然是最新的一筆Log檔持續變大。如果你發現檔案超過十分鐘沒變化,就像沒聽到心跳,八成大事不妙。此時可以挑最新的幾個檔案查詢安裝項目的處理狀態,像我就遇到在Microsoft .NET Framework 4.5 Multi-Targeting Pack卡住超過一小時:

打開當時最新的Log檔 dd_vs_enterprise_20151203220108_027_netfxdtp_48.log,就知道發生了什麼事:

MSI (s) (24:C8) [22:10:21:955]: Machine policy value 'DisableUserInstalls' is 0
MSI (s) (24:C8) [22:10:21:962]: Warning: Local cached package 'C:\Windows\Installer\1641d83.msi' is missing.
MSI (s) (24:C8) [22:10:21:962]: User policy value 'SearchOrder' is 'nmu'
MSI (s) (24:C8) [22:10:21:962]: User policy value 'DisableMedia' is 0
MSI (s) (24:C8) [22:10:21:962]: Machine policy value 'AllowLockdownMedia' is 1
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Looking for sourcelist for product {56E962F0-4FB0-3C67-88DB-9EAA6EEFC493}
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Adding {56E962F0-4FB0-3C67-88DB-9EAA6EEFC493}; to potential sourcelist list (pcode;disk;relpath).
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Now checking product {56E962F0-4FB0-3C67-88DB-9EAA6EEFC493}
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Attempting to use LastUsedSource from source list.
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Processing net source list.
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Trying source C:\ProgramData\Package Cache\{56E962F0-4FB0-3C67-88DB-9EAA6EEFC493}v4.5.50710\Redistributable\4.5.50710\.
MSI (s) (24:C8) [22:10:21:962]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 3: 2
MSI (s) (24:C8) [22:10:21:962]: Note: 1: 2203 2: C:\ProgramData\Package Cache\{56E962F0-4FB0-3C67-88DB-9EAA6EEFC493}v4.5.50710\Redistributable\4.5.50710\netfx45_dtp.msi 3: -2147287037
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Source is invalid due to missing/inaccessible package.
MSI (s) (24:C8) [22:10:21:962]: Note: 1: 1706 2: -2147483647 3: netfx45_dtp.msi
MSI (s) (24:C8) [22:10:21:962]: SOURCEMGMT: Processing media source list.
MSI (s) (24:C8) [22:10:21:963]: SOURCEMGMT: Trying media source G:\.
MSI (s) (24:C8) [22:10:21:963]: Note: 1: 2203 2: G:\netfx45_dtp.msi 3: -2147287038
MSI (s) (24:C8) [22:10:21:963]: SOURCEMGMT: Source is invalid due to missing/inaccessible package.
MSI (s) (24:C8) [22:10:21:963]: SOURCEMGMT: Trying media source D:\.
MSI (s) (24:C8) [22:10:21:963]: Note: 1: 2203 2: D:\netfx45_dtp.msi 3: -2147287038
MSI (s) (24:C8) [22:10:21:963]: SOURCEMGMT: Source is invalid due to missing/inaccessible package.
MSI (s) (24:C8) [22:10:21:964]: Note: 1: 1706 2: -2147483647 3: netfx45_dtp.msi
MSI (s) (24:C8) [22:10:21:964]: SOURCEMGMT: Processing URL source list.
MSI (s) (24:C8) [22:10:21:964]: Note: 1: 1402 2: UNKNOWN\URL 3: 2
MSI (s) (24:C8) [22:10:21:964]: Note: 1: 1706 2: -2147483647 3: netfx45_dtp.msi
MSI (s) (24:C8) [22:10:21:964]: Note: 1: 1706 2:  3: netfx45_dtp.msi

問題出在安裝程式找不到netfx45_dtp.msi的安裝檔,但VS2015主安裝程式沒有察覺此一狀況,讓我也跟著痴心守侯數小時(我寶貴的青春吶),直到耐心耗盡,怒砍安裝程式為止。(砍安裝程式會造成安裝不完整,事後得確實修復,否則無法使用某些功能)

【結論】

遇到Visual Studio安裝進度卡在某個項目很久,可善用安裝Log檔確認狀態及找出原因。至於如何排除問題有賴見招拆招,恕無萬用大絕可分享。(其實有啦,重灌Windows… XD)

【後記】

回到我的悲慘故事,花了很久時間,終於找到問題癥結在於先前為了騰出C槽空間,我搬動了Installer及Package Cache目錄。請不要誤會,移動這兩個目錄基本上是安全的,並非致命因素。但很不幸地,上週剛好才將筆電原機升級Windows 10,Windows 10很貼心地保留原本的Windows目錄放在Windows.old,另外開了一個Windows目錄,允許使用者後悔退回原本的作業系統版本。大家有猜到問題了嗎?升級過程Installer及Package Cache檔案沒有順利搬到Windows 10,陰錯陽差,炸得我遍體鱗傷!補齊兩個資料夾後,我的Visual Studio 2015 Update終於裝好了… (淚)


Comments

# by x94

我現在visual studio 2015 update1隨便新增一個空白 universal app都會出現連結中的狀況,不管按什麼都無法偵錯,我已經重灌過一次了,還是這樣,OS是win10 10586 x64,該怎麼辦?

# by Jeffrey

to x94, 我對Universal App的了解很有限,幫不上什麼忙,建議可到MSDN論壇問看看有沒有其他朋友遇過類似狀況。https://social.msdn.microsoft.com/Forums/zh-TW/home?category=windowsappszhtw

# by Tammy

我的電腦之前是從xp升級到Windows 7,現在安裝Visual Studio Community 2015也是卡住了,我照著你的方法看Log檔,發現應該也是Installer及Package Cache檔案沒有順利搬到Windows 7,想請問要怎麼補齊這兩個資料夾?

# by Jeffrey

to Tammy, 升級到Windows 7後,C糟還有windows.old資料夾嗎?若有,查查windows.old的Installer目錄有沒有短缺的檔案,若有就將檔案複製到新的Installer目錄試試。

# by vagrantlike

黑大您好: 我的筆店是win7 因顯卡過舊無法升級Win 10 Orz... 所以避開上面陷阱... 但最近安裝 VS 2015 也遇到類似問題~安裝了不下10次皆卡住...反安裝也不理我 繼續當在那邊... 提供我的亂式解法:我下載 Geek 解除程式~ 一個一個相關的檔案強制解除安裝後再重新下載iso檔 掛載上Alcohol 120% 安裝 目前安裝中是ok的 速度也較順暢~希望能成功安裝囉

# by kanakana

黑大您好: 我下載Visual C# 2008網路安裝小檔,頭一次安裝時成功, 但一個月後來因一直找不著註冊方法而手動移除了,試著安裝朋友提供的Visual C# 2010, 卻一直卡在"安裝程式正在載入安裝元件" 然後無動作。 想回去安裝2008時,卻發現下載途中 transfer rate 竟然停留在0 KB...... 對不起我知道我提供的資訊太少,還是想請問您有沒有相關的頭緒 ? 嘗試過系統還原至一個月前,但還是沒效

# by Jeffrey

to kanakana, 請問一下「手動移除」是用反安裝程式還是手動刪檔?

# by kanakana

回黑大: 是反安裝程式, 還連帶將一連串SQL Server 2008移除, 還用Revo-Uninstaller 清理登錄檔 上網有查到說SQL等程式是不應該移除的,也不應該動登錄檔 我應該是自食惡果了,抱歉打擾您

# by Jeffrey

to kanakana, (拍拍)這種狀況就真的棘手了。如果真的要救,得靠Process Monitor看缺了什麼Registry或File,設法一一補回去。工程不小… May the force be with you.

# by Michelle

為什麼我到Update Microsoft Windows就卡住不動了呀?

# by matt

像VSIXInstaller_0cb10097-0ce6-4ac3-8cb5-87afbb9a64f9這類的檔名有什麼意思呢?

# by Jeffrey

to matt, VSIXInstaller_{GUID}推測是某個Visual Studio外掛套件的安裝程式。

Post a comment