
1. 問題現(xiàn)象與產(chǎn)生根源1.1 你遇到的可能不止一種“無法安裝”先說現(xiàn)象。我見過的情況五花八門但歸納起來其實(shí)就幾類安裝向?qū)ё叩揭话脒M(jìn)度條不動了過一會彈出回滾提示告訴你安裝被中斷。雙擊安裝包直接彈窗說系統(tǒng)里有另一個版本正在安裝或者提示需要先移除舊版本。安裝完成提示成功但右鍵菜單里根本找不到TortoiseSVN版本信息也調(diào)不出來。更隱蔽的安裝前看控制面板已經(jīng)找不到TortoiseSVN了但安裝時仍然提示沖突。這些現(xiàn)象背后的原因高度一致——系統(tǒng)里還殘留著舊版本的痕跡而新安裝程序在做檢查時發(fā)現(xiàn)了這些痕跡出于自我保護(hù)選擇了中止。1.2 為什么舊版本殘留會讓新版本裝不上TortoiseSVN的安裝機(jī)制比較特殊它不只是往系統(tǒng)里拷貝文件還做了三件重要的事向Windows注冊Shell擴(kuò)展把右鍵菜單、圖標(biāo)覆蓋層掛到資源管理器上。注冊COM組件讓資源管理器能夠調(diào)用它的DLL。注冊緩存服務(wù)TSVNCache用于在工作副本目錄里顯示文件狀態(tài)圖標(biāo)。這三件事都要修改系統(tǒng)層面的配置。安裝程序在寫入之前會先檢查這些位置是否已經(jīng)被占用。如果舊版本卸載不干凈殘留的注冊表項(xiàng)會告訴系統(tǒng)“這里已經(jīng)有一個TortoiseSVN了”新安裝程序就會認(rèn)為環(huán)境沖突直接回滾。打個比方這就像你要往衣柜里掛一件新衣服但舊衣服的衣架還掛在那里占著位置你不把衣架拿掉就直接往上掛肯定會卡住。Windows Installer的事務(wù)機(jī)制又特別嚴(yán)格任何一步失敗都會把整個安裝回滾不會留一個半裝好的狀態(tài)給你。注意TortoiseSVN的安裝依賴MSIWindows Installer機(jī)制這種機(jī)制的特點(diǎn)是“全有或全無”。一旦中途出錯之前復(fù)制進(jìn)去的文件、寫入的注冊表都會被撤銷。所以“裝到一半失敗”其實(shí)是一個好消息說明系統(tǒng)至少還處于干凈狀態(tài)真正麻煩的是“提示成功但實(shí)際沒裝上”。另外還有一個容易忽略的隱藏因素Windows的安裝數(shù)據(jù)庫注冊表中的Installer子鍵會記錄各個MSI包的安裝狀態(tài)。如果舊版本卸載不完全數(shù)據(jù)庫里會留有“這個產(chǎn)品存在”的條目。新安裝程序讀取到這個條目依然會覺得舊產(chǎn)品還在于是拒絕繼續(xù)。這也是為什么有些人明明把目錄都刪干凈了還是裝不上——問題不在文件而在注冊表的安裝記錄里。2. 安裝前的環(huán)境確認(rèn)與清理方案2.1 自查系統(tǒng)里到底還有沒有殘留動手清理前先花幾分鐘確認(rèn)一下系統(tǒng)里到底還留著多少舊版本痕跡。盲目上來就刪注冊表反而容易出問題。我習(xí)慣按下面的順序排查打開“控制面板” - “程序和功能”看看列表里還能不能看到TortoiseSVN。有的話先從這里卸載不要直接刪目錄。按下CtrlShiftEsc打開任務(wù)管理器找到TSVNCache.exe、TortoiseSVN相關(guān)的進(jìn)程。有的話先結(jié)束進(jìn)程否則文件鎖定會導(dǎo)致清理失敗。在文件資源管理器地址欄輸入%AppData%\TortoiseSVN和%LocalAppData%\TortoiseSVN看有沒有遺留的配置目錄。檢查C:\Program Files\TortoiseSVN目錄是否還存在。注意64位系統(tǒng)還有C:\Program Files (x86)\TortoiseSVN這個可能。在命令行執(zhí)行reg query HKCU\Software\TortoiseSVN和reg query HKLM\SOFTWARE\TortoiseSVN看有沒有殘留的注冊表鍵。這一步的關(guān)鍵是區(qū)分“真正需要清理的殘留”和“系統(tǒng)正常的記錄”。如果你之前用的是正確卸載方式但注冊表里仍有一些關(guān)于組件路徑的記錄這也不一定就是問題。只有當(dāng)安裝程序明確提示沖突時才需要動手清理。2.2 徹底卸載舊版本的實(shí)操流程如果你發(fā)現(xiàn)的殘留來自一個“卸載不干凈”的舊版本可以參考下面的完整流程清理。這個流程我實(shí)際驗(yàn)證過多次基本能覆蓋大部分殘留場景。第一步先卸載。如果控制面板里還能看到TortoiseSVN選中它點(diǎn)卸載。如果看不到跳過這一步說明卸載程序早就跑過了但沒清干凈。第二步清除殘留目錄。手動刪除前面查到的TortoiseSVN安裝目錄、AppData下的配置目錄。刪除時如果提示文件被占用先回到任務(wù)管理器結(jié)束TSVNCache.exe和相關(guān)進(jìn)程再重新刪除。第三步清理注冊表。打開注冊表編輯器定位到以下幾個常見位置HKEY_CURRENT_USER\Software\TortoiseSVNHKEY_LOCAL_MACHINE\SOFTWARE\TortoiseSVNHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\TortoiseSVN32位版本在64位系統(tǒng)中的記錄這三個鍵如果存在可以右鍵刪除。但對非菜鳥用戶我強(qiáng)烈建議刪除前先用導(dǎo)出功能備份。因?yàn)樽员硎侨峙渲谜`刪可能導(dǎo)致其他軟件異常。導(dǎo)出成一個.reg文件萬一刪錯了還能恢復(fù)。第四步處理Windows Installer安裝記錄。這一步最容易被忽略也最關(guān)鍵。打開注冊表編輯器定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer這里記錄了系統(tǒng)里所有MSI產(chǎn)品的狀態(tài)。如果TortoiseSVN的卸載不完整這里會殘留對應(yīng)的條目。查找那些包含TortoiseSVN相關(guān)ProductCode的記錄刪除對應(yīng)的鍵。不過直接動Installer鍵有風(fēng)險我建議用命令行的msiexec命令來解決??梢杂孟旅孢@個思路打開命令提示符管理員執(zhí)行msiexec /x {ProductCode}把殘留的MSI產(chǎn)品正式卸載掉。ProductCode可以在Installer注冊表鍵下反查。如果嫌麻煩在2.3節(jié)我會給一個更省事的替代方案。2.3 注冊表與殘留文件的深度清理除了上面說的幾處注冊表位置還有兩個位置是TortoiseSVN這種Shell集成工具特有的不清理干凈很容易復(fù)發(fā)。第一個是Shell擴(kuò)展的注冊位置HKEY_CLASSES_ROOT\CLSID下可能會有TortoiseSVN相關(guān)的GUID鍵這類鍵通常以{XXXX-XXXX-XXXX}形式命名。如果殘留資源管理器仍然會去加載舊版本的DLL即使新版本裝好了也可能會被舊的擴(kuò)展干擾。搜索方法在注冊表編輯器里使用查找功能輸入“TortoiseSVN”把范圍設(shè)為“項(xiàng)”查出來的每一個鍵都要看內(nèi)容確認(rèn)是否確實(shí)和TortoiseSVN相關(guān)再決定刪不刪。第二個是Windows的PendingFileRenameOperations鍵。這個鍵位于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager記錄的是系統(tǒng)重啟時要完成的重命名或刪除操作。如果之前卸載時標(biāo)記了一堆待刪除的TortoiseSVN文件系統(tǒng)卻一直沒重啟新安裝程序就會在這些文件還沒刪除完畢的情況下檢測到“舊文件仍在”導(dǎo)致安裝被中止。遇到這種情況最省事的辦法其實(shí)是重啟電腦。很多人卸載軟件后圖省事不重啟直接裝新版本結(jié)果就是碰到這類被系統(tǒng)鎖定的文件。重啟之后PendingFileRenameOperations里的操作會被執(zhí)行文件清掉了安裝失敗的問題往往就迎刃而解。提示如果你發(fā)現(xiàn)清理完這些位置后仍然無法安裝可以先下載微軟官方的程序安裝和卸載疑難解答工具用它掃描并清除可能損壞的MSI安裝記錄。這類工具本質(zhì)上是把Installer注冊表里損壞的條目自動修復(fù)比純手工翻注冊表要安全很多。3. 重新安裝的完整步驟與關(guān)鍵參數(shù)3.1 安裝前的準(zhǔn)備清理完舊版本殘留重啟電腦后下一步就是重新安裝了。這一步幾個細(xì)節(jié)做到位能少踩很多坑。第一安裝包要選對。TortoiseSVN的安裝包分為32位和64位兩種通常從官網(wǎng)或你所在團(tuán)隊(duì)內(nèi)部的軟件倉庫下載。怎么選看你的操作系統(tǒng)版本。WinX打開系統(tǒng)信息查看系統(tǒng)類型。64位系統(tǒng)裝64位版本32位系統(tǒng)裝32位版本。注意在64位系統(tǒng)上裝32位版本的TortoiseSVN功能上也能用但圖標(biāo)覆蓋層和右鍵菜單的表現(xiàn)會受影響而且容易出現(xiàn)兼容性問題不建議這么干。第二語言包要不要一起下。如果你需要使用中文界面TortoiseSVN默認(rèn)英文界面需要單獨(dú)下載對應(yīng)版本的語言包。注意語言包版本必須和主程序版本嚴(yán)格一致版本不匹配會導(dǎo)致語言切換失效。我個人的習(xí)慣是先用英文界面跑一遍確認(rèn)一切正常后再安裝語言包并切換成中文。這樣即使出問題排查范圍也小一些。第三右鍵菜單的取舍。TortoiseSVN安裝過程中會讓你選擇功能組件默認(rèn)是全選。如果你只想用最基礎(chǔ)的提交、更新、檢出操作可以自定義去掉一些不常用的組件比如版本日志圖形分析、文件差異對比工具這些。但有一個組件我強(qiáng)烈建議保留就是“SVN command line tools”它會裝一個svn.exe到系統(tǒng)PATH里。有了它你就可以在終端里直接跑svn命令很多圖形界面里看不清楚的問題用命令行一查就清楚了。3.2 安裝過程詳解安裝時右鍵點(diǎn)擊安裝包選擇“以管理員身份運(yùn)行”。這一步很重要因?yàn)門ortoiseSVN要寫注冊表、注冊Shell擴(kuò)展普通權(quán)限可能寫不進(jìn)去尤其是UAC開啟的系統(tǒng)。安裝向?qū)У谝徊綍屇氵x擇安裝路徑。默認(rèn)是C:\Program Files\TortoiseSVN通常保持默認(rèn)就可以。有特殊要求可以改到其他盤符但要注意路徑里不要出現(xiàn)中文和空格否則某些工具鏈解析路徑時可能出問題。接著進(jìn)入組件選擇這一步我一般這樣做保留“Core”核心組件這個是必須的。勾選“SVN command line tools”方便命令行操作。語言包如果已經(jīng)下載在下一步指定語言包目錄或者裝完主程序后單獨(dú)運(yùn)行語言包安裝。差異查看工具和版本圖平時用得多的選上用得少可以去掉。然后一路Next等待進(jìn)度條走完。正常情況下整個安裝過程不超過兩分鐘??吹健癐nstallation completed”界面說明裝好了。這里補(bǔ)充一個原理層面的細(xì)節(jié)TortoiseSVN安裝過程中會執(zhí)行一次“資源管理器集成注冊”也就是把它的DLL注冊到Shell里、圖標(biāo)覆蓋層登記到Icon Overlay機(jī)制中。這一步完成時資源管理器需要刷新才能看到效果。所以安裝完成后如果右鍵菜單沒有立刻出現(xiàn)不要慌張先重開一個資源管理器窗口或者用任務(wù)管理器重啟explorer.exe再來檢查。3.3 安裝后的驗(yàn)證與配置檢查裝完先別急著用花兩分鐘驗(yàn)證一下安裝是否完整。第一確認(rèn)版本。在任意文件夾里右鍵如果能看到TortoiseSVN的菜單項(xiàng)說明Shell擴(kuò)展已經(jīng)生效。鼠標(biāo)懸停到菜單上通常還能看到版本號信息。第二命令行驗(yàn)證。打開CMD或PowerShell輸入svn --version如果返回了svn版本的文本信息說明命令行工具也裝好了。同時可以檢查一下版本號和你的TortoiseSVN主程序版本是否一致。不一致的話有可能是機(jī)器上還有另一個SVN工具干擾了PATH路徑。第三配置SVN基礎(chǔ)信息。打開任意倉庫的檢出目錄右鍵 - TortoiseSVN - Settings在彈出的設(shè)置界面里確認(rèn)用戶名、全局忽略列表、代理設(shè)置這些項(xiàng)是否正常。第一次使用還建議設(shè)置一下“自動更新”默認(rèn)策略這個因團(tuán)隊(duì)約定而異沒有統(tǒng)一答案。注意TortoiseSVN的圖標(biāo)覆蓋層默認(rèn)只對“受版本控制的目錄”生效。也就是說你隨便開一個普通文件夾看不到小綠勾是正常的別誤以為是圖標(biāo)功能壞了。只有當(dāng)你檢出或者加入到工作副本后文件狀態(tài)圖標(biāo)才會出現(xiàn)。4. 常見問題與排查技巧實(shí)錄4.1 安裝被Windows Installer阻止的排查思路這個問題幾乎每個遇到“無法安裝”的人都會碰上。具體表現(xiàn)是雙擊安裝包彈出一個提示大意是“另一個安裝正在進(jìn)行”或“請等待當(dāng)前安裝完成”。出現(xiàn)這種提示并不一定是你真的在同時運(yùn)行兩個安裝程序。更常見的原因是Windows Installer服務(wù)的狀態(tài)被上一次異常卸載卡住了。排查步驟按WinR輸入services.msc回車找到Windows Installer服務(wù)看狀態(tài)是不是“已停止”。正常情況下它是手動啟動的沒有安裝任務(wù)時會停止這是正常的。如果有安裝任務(wù)執(zhí)行過卻未釋放可以在服務(wù)里右鍵重啟這個服務(wù)前提是用管理員權(quán)限。再用任務(wù)管理器看看有沒有msiexec.exe進(jìn)程殘留有的話結(jié)束掉。另一個隱蔽的來源是注冊表里的“運(yùn)行中安裝”記錄。位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\InProgress如果這里存在非空的鍵值Windows Installer會認(rèn)為有安裝正在進(jìn)行中。我遇到過幾次這樣的情況重啟也沒用最后清理了這個鍵之后的安裝才恢復(fù)。4.2 安裝成功后右鍵菜單沒有TortoiseSVN好不容易裝上了右鍵卻沒有TortoiseSVN入口這種情況也常見。原因通常不是安裝失敗而是Shell擴(kuò)展沒有被正確加載。排查順序先修復(fù)文件資源管理器。右鍵任務(wù)欄空白處打開任務(wù)管理器找到“Windows資源管理器”右鍵重啟。這一步能解決大部分菜單不刷新問題。如果重啟資源管理器沒用檢查系統(tǒng)里是否有其他安全軟件禁用了Shell擴(kuò)展。某些安全軟件會默認(rèn)攔截新的Shell擴(kuò)展加載。檢查TortoiseSVN的設(shè)置界面確認(rèn)圖標(biāo)覆蓋層沒有被切換成禁用狀態(tài)。有一個我親身踩過的坑某開發(fā)者裝了一個系統(tǒng)優(yōu)化工具它把資源管理器右鍵菜單里的非系統(tǒng)擴(kuò)展默認(rèn)關(guān)閉了導(dǎo)致TortoiseSVN裝完菜單不顯示。后來在優(yōu)化工具的白名單里加回TortoiseSVN重啟資源管理器才恢復(fù)。如果你也裝了這類工具優(yōu)先檢查它的右鍵菜單管理功能。4.3 覆蓋安裝與升級時特別容易踩的坑如果你不是全新安裝而是從舊版本覆蓋升級這里有幾個額外的注意事項(xiàng)。第一個坑版本跨度太大。TortoiseSVN的版本更新會帶來工作副本格式的變化??绱蟀姹旧墪r舊工作副本可能會提示“工作副本已鎖定”或格式不兼容。遇到這種情況不要急著重裝先備份工作副本關(guān)鍵是的.svn目錄再在TortoiseSVN設(shè)置里執(zhí)行“清理”或升級工作副本。第二個坑多版本殘留的DLL沖突。有時候舊版本殘留的某些DLL還在系統(tǒng)目錄里新版本用的則是同文件名但內(nèi)容不同的文件。系統(tǒng)加載Shell擴(kuò)展時可能把兩者混著用導(dǎo)致資源管理器崩潰或圖標(biāo)錯亂。解決辦法是卸載后搜索并刪除舊DLL或者在安全模式下安裝。第三個坑安裝包的語言版本不一致。下載主程序時是中文版安裝包卻配了一個英文版語言包或者反過來。這種不一致在少數(shù)情況下會導(dǎo)致安裝中語言切換失敗甚至安裝中斷。統(tǒng)一版本來源安裝前確認(rèn)主程序和語言包版本號完全一致能避免這個問題。4.4 常見問題速查表把前面提到的典型問題和對應(yīng)處理方式整理成一張表方便對照排查問題特征根本原因快速解決辦法安裝向?qū)е型净貪L殘留的Shell擴(kuò)展或注冊表項(xiàng)沖突清理注冊表后重啟再安裝提示“另一個安裝正在進(jìn)行”Windows Installer狀態(tài)被卡住重啟安裝服務(wù)清理InProgress鍵右鍵菜單無TortoiseSVNShell擴(kuò)展未加載或被安全軟件禁用重啟資源管理器檢查安全軟件白名單安裝提示成功但版本信息調(diào)不出組件缺失或PATH環(huán)境異常重新運(yùn)行安裝包勾選全部組件修復(fù)圖標(biāo)覆蓋層不顯示非工作副本目錄或覆蓋層設(shè)置被關(guān)閉確認(rèn)目錄已是工作副本檢查設(shè)置安裝語言包后界面仍是英文版本號不匹配或沒重啟換成一致的版本號重啟資源管理器結(jié)尾踩過幾次坑之后我現(xiàn)在安裝TortoiseSVN這類和系統(tǒng)外殼深度集成的工具流程已經(jīng)固定成一套先備份舊配置再用清理工具把卸載殘留清除干凈重啟然后才進(jìn)行安裝??粗闊┑@些步驟省掉哪一環(huán)都可能讓你在“無法安裝”的怪圈里多折騰幾個小時。最后再分享一個小技巧無論什么時候重裝TortoiseSVN先把用戶目錄里的配置文件夾備份一份。這個目錄里存著你所有的服務(wù)器地址、賬號密碼緩存、比對工具的偏好設(shè)置。備份它重裝后恢復(fù)幾分鐘就能回到原來的使用習(xí)慣。別等裝完發(fā)現(xiàn)配置全丟了才來后悔。