Kể từ khi tôi bắt đầu sử dụng Windows 7, vấn đề này đã làm phiền tôi. Thỉnh thoảng tôi thấy những câu hỏi tương tự xuất hiện trên các diễn đàn linh tinh, nhưng tôi chưa bao giờ thấy câu trả lời. Đây là hai kịch bản gần như luôn luôn tái tạo nó:
Cách thám hiểm
- Với explorer, điều hướng đến một thư mục chứa ít nhất một tệp exe
- Lên một thư mục ngay lập tức
- Xóa thư mục vừa điều hướng đến
- Sản lượng thư mục Access Denied thoại nêu Bạn cần sự cho phép để thực hiện hành động này Bạn yêu cầu sự cho phép từ Ban Quản Trị để thực hiện thay đổi vào thư mục này , với các nút Try Again và Hủy bỏ
- Đánh lại Thử không bao giờ hoạt động ngay lập tức. Đợi một phút hoặc sau đó nhấp lại vào nó sẽ hoạt động
Lưu ý: Nếu ở bước 2 và đợi một phút trở lên trước khi lên một thư mục, sự cố không xảy ra và thư mục có thể bị xóa
Cách Visual Studio
- Xây dựng một dự án sản xuất một tệp exe
- chạy thực thi sau đó đóng nó
- Ngay lập tức xây dựng lại dự án (bằng cách thay đổi một ký tự trong tệp nguồn chẳng hạn)
- Sản lượng gây tử vong lỗi LNK1168: không thể mở /path/to/the.exe để viết
Lưu ý: Nếu ở bước 2 và đợi một phút trở lên trước khi xây dựng lại, sự cố không xảy ra.
Một số thông số kỹ thuật
- Xảy ra cả trên Windows 7 32 và 64 bit, với VS2008 / 2010/2011
- Xảy ra trên 3 máy khác nhau
- Tôi không có máy quét virus
- Tôi có một loạt các dịch vụ bị vô hiệu hóa, nhưng không có gì ngăn Windows chạy bình thường, UAC cũng bị vô hiệu hóa
- Xảy ra trên bất kỳ loại đĩa
- Tôi luôn sử dụng tài khoản người dùng trong nhóm Quản trị viên
Rõ ràng cả hai kịch bản đều rất giống nhau và cực kỳ tái tạo. Vì vậy, tôi đã tìm ra một số quy trình phải mở tệp vì lý do nào đó và phát hành lại sau. Tuy nhiên, sử dụng hệ thống nội bộ
handle -a
các tập tin exe trong câu hỏi không bao giờ xuất hiện. (đó là cách chính xác để sử dụng tay cầm, phải không?) Vì vậy, trong khi explorer / VS đang báo cáo, họ không thể truy cập tệp, handle.exe nói rằng nó không được sử dụng ở bất cứ đâu. Điều này khiến tôi khá là không biết gì, vì vậy tôi tự hỏi liệu ai đó có thể đưa ra một giải pháp: tại sao điều này xảy ra và làm thế nào để giải quyết nó?
Cập nhật để trả lời các câu hỏi được hỏi:
- Tôi không thể tái tạo vấn đề ở Chế độ an toàn
- Một loạt các phần mở rộng vỏ được cài đặt. Từ SellExView, đây là những cái không phải microsoft phổ biến cho tất cả các máy: NitroPDF, WinRAR, TortoiseGit, TortoiseSvn, NVidia. Tôi sẽ thấy các Rùa đáng ngờ nhất, mặc dù đối với cả tùy chọn 'Status Cache' được đặt thành 'Chỉ bộ đệm trạng thái cho một thư mục, không có lớp phủ đệ quy', tức là không có TortoiseCache.exe đang chạy.
- Với vấn đề explorer, ProcessExplorer không hiển thị tệp thực thi. Mặc dù vậy, nó vẫn hiển thị thư mục của tệp thực thi, nhưng vẫn tiếp tục hiển thị nó ngay cả sau khi nó bị xóa để có vẻ như không thực sự liên quan
- Với vấn đề VS, nó xảy ra với VS ngay cả khi không có cửa sổ explorer nào được mở trên thư mục đích. Và một lần nữa, ProcessExplorer không hiển thị tệp thực thi, cũng như thư mục mà tệp thực thi nằm trong. Lưu ý rằng trong 'chế độ' này với VS, sự cố chỉ xảy ra khi chạy tệp thực thi. Nếu không chạy nó, tôi có thể xây dựng nó mà không gặp vấn đề hết lần này đến lần khác.
- Trong mode Chế độ VS ' và cửa sổ thám hiểm mở trên thư mục của tệp thực thi (chỉ được thử nghiệm với exe C #), nó sẽ bị lỗi: Tôi không thể xây dựng lại vì VS phàn nàn exe đang được sử dụng bởi một quy trình khác. Tuy nhiên, nếu tôi xóa exe khỏi cửa sổ explorer mở, điều này sẽ hoạt động và do đó việc xây dựng thành công. Một lần nữa, không có tài liệu tham khảo nào trong ProcessExplorer. Dường như khớp với kết quả của tôi với handle.exe (không PE và xử lý sử dụng cùng một API trong nội bộ?)
Cập nhật 2 Không thể chỉ là explorer: sau khi giết explorer.exe, vấn đề VS vẫn còn đó.
Cập nhật 3 Sử dụng Trình giám sát quy trình như Asher gợi ý cho thấy sự thật thú vị: đối với chế độ thám hiểm, có 10 cuộc gọi tới IRP_MJ_CREATE khi mở thư mục. Tuy nhiên, chỉ có 9 cuộc gọi đến IRP_MJ_CLEANUP. Tất cả các cuộc gọi này bắt nguồn từ bên trong shell32.dll, vì vậy đây chắc chắn không phải là sự cố cài đặt của bên thứ 3. Và rõ ràng là một IRP_MJ_CLEANUP bị thiếu gây ra sự cố: chính xác là 1 phút sau khi mở thư mục, chính quá trình Hệ thống sẽ phát ra lệnh gọi IRP_MJ_CLEANUP và tệp được giải phóng và bị xóa.
Tuy nhiên, tôi vẫn không thể hiểu tại sao điều này xảy ra. Đây có phải là một lỗi thám hiểm được kích hoạt bởi một số thay đổi tôi đã thực hiện?
Giải pháp! Nhìn qua các dịch vụ mà tôi đã vô hiệu hóa, tôi nhận thấy mô tả về Trải nghiệm ứng dụng nói và tôi trích dẫn, Xử lý các yêu cầu bộ đệm tương thích ứng dụng cho các ứng dụng khi chúng được khởi chạy . Âm thanh quen thuộc. Và thực tế, sau khi bắt đầu dịch vụ, tôi không thể tái tạo bất kỳ vấn đề nào nữa và đầu ra của ProcMon khác và ngắn hơn. Mặc dù buồn cười, vì sau khi dừng dịch vụ một lần nữa, mọi thứ vẫn ổn và đầu ra của procmon vẫn ngắn hơn.
Tôi đã thử điều này trên hai máy, với tất cả các công cụ của bên thứ 3 đang vui vẻ chạy và tất cả vẫn ổn.
Tôi không chắc đây có phải là lỗi thực sự hay không (người ta có thể nói 'bạn mong đợi gì khi vô hiệu hóa dịch vụ'), nhưng vấn đề không chính xác là vấn đề biến mất chỉ bằng cách bắt đầu một dịch vụ và sau đó dừng lại.
Bounty tìm đến bất cứ ai có thể cung cấp cái nhìn sâu sắc hơn về vấn đề này, khác với @Asher vì đã chỉ cho tôi đến ProcMon, nơi cuối cùng đã đưa tôi đi đúng hướng.