用 Win7 一年多了,一直在這個環境下編程,其他都挺好,就是有個問題非常惡心,在VS下編譯經常出現進程正在使用,無法覆蓋的錯誤,這個問題我記得博問中以前也有其他人遇到過,也沒有解決掉。此問題困擾了我一年,期間我查了很多中英文資料都沒有得到理想的答案。今天實在忍無可忍,又去狗了一下,可能關鍵字輸入不一樣吧,這次終于狗出來了,困擾一年的問題終于解決了。寫此文希望能幫助和我一樣正在為此問題抓狂的同仁。
這個問題其實并不是VS的問題,只是因為我用VS需要經常編譯并生成exe文件,所以才會表現的比較突出。它本質上其實是操作系統本身的問題,其表現為如果你運行了一個exe文件,當關閉這個進程后,你刪除它,在資源管理器中你會看到它被刪除了,但一刷新它又出現了,要等待大約5分鐘左右,這個文件才會實際被刪除掉,在此期間你無法對這個文件覆蓋或改名。體現在VS開發環境中就是一旦你編譯完運行過一次這個程序,你后面再編譯,就報進程正在使用,無法覆蓋,要等5分鐘后才好。這個等待的時間時長時短,故障也不是每次都出現,不同的exe文件出現的頻率也不一樣。
我之前在google 和 百度中搜索過很多次,中文和英文論壇中都有很多人遇到這個問題,基本上回答者給出的解決方案有以下幾種:
1. 第三方殺毒軟件在作怪
這個是最容易聯想到的,在MSDN 的英文論壇上,我看到一個來自微軟的工程師就是這么回答的,他堅決否認是操作系統引起的。由于他代表微軟回答問題,這個很有一些誤導性。實際上我停用了我的殺毒軟件,還是無法解決這個問題,論壇上遇到相同問題的人也是一樣。
2. Indexing service 引起
這種說法也是想當然的,認為Indexing service 在后臺工作,可能會訪問這個文件,導致無法刪除。但這個說法有個問題他無法解釋,就是為什么只有exe文件才出現這個問題?不管怎么樣,我禁用了 Indexing service 這個服務,結果依然無法解決這個問題。
3. 權限不夠造成
這個說法也比較荒謬,權限不夠那應該永遠無法刪除才對,而且出錯信息不應該是進程正在使用。我給了所在目錄最高權限,依然無法解決這個問題。
為了證實這個問題到底是操作系統的問題還是應用程序的問題,我嘗試了下面方法
1. 用 ProcessExplorer 來看對應的exe 文件有沒有進程在占用
結果是沒有進程在占用。
2. 將 exe 文件所在的目錄做了審核,看刪除后到底誰又把它重新創建了,因為刪除后從表象上看,刷新一下,進程又出來了,所以我懷疑有什么進程重新創建了這個exe文件。
結果當刪除后,審核的日志中報告刪除成功,之后沒有重建的日志,而此時資源管理器中仍然能看到這個文件,而且無法覆蓋和改名。
由此我基本判斷這個問題是操作系統引起的,和其他應用程序占用無關,exe 被刪除后,操作系統中出現了不一致。很長一段時間我一直沒有找到解決方案,因此我對win7 操作系統抱有成見,因為這個問題實在是個很嚴重的問題,這么多人都遇到過,居然都沒有去fix 這個bug。不過今天我終于找到了解決方案,看來不是bug,而是使用不當造成,至于為什么會出現這個問題,我還沒有搞清楚。
問題的原因是 Application Experience 這個服務被關閉造成的,其實還有一個服務叫Program Compatibility Assistant Service 也要運行,只有這個兩個服務同時運行,才不會出現這個刪除不掉exe 的問題。
浙公網安備 33010602011771號