TortoiseSVN覆蓋圖標消失及尋回方法

TortoiseSVN覆蓋圖標消失及尋回方法  

最近發現TortoiseSVN的覆蓋圖標消失了,打開資源管理器,怎麼都看不到已經同步的文件夾顯示已同步圖標。到SVN的設置面板,也找不到任何相關的解決辦法。

不過有一天,使用DW瀏覽文件,定位到文件,這時候發現了已同步圖標。這就更讓人疑惑了,但是最起碼證明,圖標文件沒有丟失,只是因爲某種原因,沒辦法顯示出來,那就有可能是軟件衝突了。
可是近期七七八八裝了不少東西,到底是哪個的原因呢?

不明原因,所以,百度google之,發現還是挺多人遇到這情況的,現摘錄如下:

“開始以爲是TortoiseSVN壞了,於是重裝,但結果還是一樣。於是找了好多資料,終於發現癥結所在--原來是Windows對覆蓋圖標類型的數據限制的原因。Windows最多隻允許15個覆蓋圖標,它自己又用了幾個,結果給用戶用的就11個左右了(這個限制一直都Windows 7都沒有放寬,真不知微軟是怎麼想的)。TortoiseSVN標準會使用7個(普通圖標、已修改圖標、衝突指示圖標、已刪除圖標、新增文件圖標、忽略圖標、未版本化圖標等),這樣剩下可用的就少之又少了。如果再安裝了網盤軟件(如:快盤,Dropbox等),那就更慘了,它們各自又會使用3個左右的覆蓋圖標,這樣,覆蓋圖標當然遠遠不夠用了。
那麼,覆蓋圖標的設置保存在Windows的哪個地方呢?如果有超過11個的覆蓋圖標,Windows如何選擇顯示哪些屏蔽哪些呢?下面繼續…
所有應用程序的覆蓋圖標都需要在註冊表“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers”下面增加一個項目,當需要顯示覆蓋圖標時,Windows會按照項目名稱的字母順利依次查詢在這些項目裏所指示的接口,以檢測是否有覆蓋圖標,當檢測到11個有效的接口後,Windows就會自動停止繼續向下檢測,這樣,後來的覆蓋圖標就不會顯示了。
知道原理了,解決問題就好辦了。我們可以分析一下在這個註冊表項下的所有項目,看哪些覆蓋圖標是需要的,哪些是不需要的,把不需要的項目的名稱改一下,前面加個“z”,這樣,這個表項按字母排序就自動排到最後面了。哪些是不需要的呢?比如:網盤的“正在同步圖標”就沒什麼用,可以去掉。其它的,可以自己看着辦了。

如果你進行調整後,把TortoiseSVN的所有覆蓋圖標全部提前,但TortoiseSVN仍然不會顯示忽略圖標、未版本化圖標。爲什麼呢?研究了TortoiseSVN的源代碼才發現,原來TortoiseSVN會自己分析在ShellIconOverlayIdentifiers中註冊的覆蓋圖標數,如果註冊了太多,TortoiseSVN會自動屏蔽一些無關緊要的圖標,目的是讓別人軟件的覆蓋圖標儘可能有機會顯示。也就是說,如果你希望,顯示TortoiseSVN的這些它自己認爲“無關緊要”的覆蓋圖標,你需要刪除一些別的程序的圖標,把覆蓋圖標的總數減小到13個以下,這時,TortoiseSVN纔會正常顯示忽略圖標、未版本化圖標等無關緊要的圖標。”


----------------------------------------------------------------------------------分割線---------------------------------------------------------------------------------------------

對於我自己機器, 看了下註冊表,ShellIconOverlayIdentifiers的目錄樹如下:

    !!!BoxFlashSyncExt1
    !!!BoxFlashSyncExt2
    !!!BoxFlashSyncExt3
    !!!BoxFlashSyncExt4
!IconOverlay_Conflict
!IconOverlay_ForbidSync
!IconOverlay_LargeFile
!IconOverlay_Synced
!IconOverlay_Syncing
.KLive_OverlayIcon_ForbidSync
.KLive_OverlayIcon_Synced
.KLive_OverlayIcon_Syncing
1TortoiseNormal
2TortoiseModified
360UDiskGuard Icon Overlay
3TortoiseConflict
4TortoiseLocked
5TortoiseReadOnly

...

...

怪不顯示不出SVN的圖標呢,在SVN要overlay icon前面有好多個野蠻的icon,酷盤、115 、快盤三個網盤也是想盡了千方百計讓自己的overlay icon能夠被顯示出來。居然連感嘆號,空格都用上了。

酷盤對應的overlayicon爲:

    !!!BoxFlashSyncExt1
    !!!BoxFlashSyncExt2
    !!!BoxFlashSyncExt3
    !!!BoxFlashSyncExt4


115 對應的overlayicon爲:

!IconOverlay_Conflict
!IconOverlay_ForbidSync
!IconOverlay_LargeFile
!IconOverlay_Synced
!IconOverlay_Syncing


快盤對應的overlayicon爲:

.KLive_OverlayIcon_ForbidSync
.KLive_OverlayIcon_Synced
.KLive_OverlayIcon_Syncing

既然知道原理了,那就挨個把網盤幹掉吧。

其中:115網盤屬於半綠色安裝,因爲只有Sync115Ext.dll (在C:\Users\用戶名\AppData\Roaming\115\Box) 被註冊,它正在shell overlay icon對應的dll,因此,只需要將它反註冊一下就可以了:regsvr32 /u Sync115Ext.dll。

經過卸載,ShellIconOverlayIdentifiers的目錄樹終於乾淨了,目錄樹如下:

1TortoiseNormal
2TortoiseModified
360UDiskGuard Icon Overlay
3TortoiseConflict
4TortoiseLocked
5TortoiseReadOnly

...

...

最後,重啓一下,或註銷一下,SVN圖標終於重建天日。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章