Truy cập Windows 7 bị từ chối để thực thi .. bằng gì?


14

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

  1. Với explorer, điều hướng đến một thư mục chứa ít nhất một tệp exe
  2. Lên một thư mục ngay lập tức
  3. Xóa thư mục vừa điều hướng đến
  4. 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 AgainHủy bỏ
  5. Đá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

  1. Xây dựng một dự án sản xuất một tệp exe
  2. chạy thực thi sau đó đóng nó
  3. 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)
  4. 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 ' 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.


2
Một số câu hỏi. Có vấn đề thám hiểm xảy ra trong chế độ an toàn? Bạn đã cài đặt phần mở rộng shell nào chưa? Với vấn đề Visual studio của bạn, nếu bạn chạy trình giám sát quy trình và lọc xuống exe của bạn, nó có hiển thị bất cứ điều gì truy cập vào tệp không?
sgmoore

Thật kỳ lạ, cả hai kịch bản bạn đề xuất đều hoạt động như mong đợi đối với tôi (không có lỗi). Giống như sgmoore gợi ý, hãy loại bỏ Process Monitor và theo dõi các thư mục / tệp.
Ƭᴇcʜιᴇ007

@sgmoore xem cập nhật
stijn

Bạn có chắc chắn 100% rằng chỉ vì các cuộc gọi bắt nguồn từ shell32.dll mà quy tắc này đã cài đặt bên thứ 3 không? Tôi không biết đủ về những gì diễn ra ở mức cực kỳ thấp để chắc chắn liệu điều đó có đúng hay không, nhưng chắc chắn đó không phải là một giả định mà tôi sẽ đưa ra.
sgmoore

@sgmoore 100% không, nhưng 99%, vâng. Kết luận của tôi không chỉ dựa trên những gì tôi viết ở đây; Tôi có các ký hiệu cho tất cả các dll hệ thống vì vậy tôi thấy tên hàm đầy đủ trong bảng gọi của procmon. Tất cả các cuộc gọi được thực hiện bởi explorer khi mở thư mục đến từ các lớp có tên như CLoadIconTask, các tên đã viết 'Microsoft' trên đó. Tôi là một lập trình viên nên tôi có một số kiến ​​thức về việc diễn giải các cửa sổ. Mọi thứ không phải microsoft vẫn bị vô hiệu hóa trong AutoRun. Trên một máy khác thì không, nhưng toàn bộ đầu ra procmon là như nhau. Tất cả những trực giác này làm cho tôi tin tưởng mạnh mẽ rằng đó chỉ là MS.
stijn

Câu trả lời:


7

Tôi nghĩ rằng vấn đề bạn đang thấy có liên quan đến ngón tay cái.db mà Windows explorer tạo ra. Hãy thử vô hiệu hóa điều này, khởi động lại và xem nếu vấn đề tái tạo.

Để tắt ngón tay cái.db mở Trình chỉnh sửa chính sách nhóm (gpedit.msc), hãy chuyển đến Cấu hình người dùng-Bảng điều khiển> Tùy chọn thư mục mẫu quản trị> tab Thành phần Windows-Windows> Windows Explorer. tìm "Tắt bộ nhớ đệm của hình thu nhỏ trong các tập tin ngón tay cái ẩn" và bật nó Hình thu nhỏ không lưu trong bộ nhớ cache.

Nếu nó không hoạt động, tôi sẽ thử điều tra bằng cách sử dụng Trình theo dõi tiến trình Sysiternals. sử dụng nó để xem ai đang truy cập thư mục khi bạn bị từ chối truy cập. xem nếu nó thực sự là một truy cập bị từ chối hoặc vi phạm chia sẻ có nghĩa là ai đó đang giữ tệp.


1
Thumbs.db không tồn tại trong win7.
kinokijuf

1
đúng vậy đi tới Tùy chọn thư mục và bật "hiển thị các tệp, thư mục và ổ đĩa bị ẩn"
Asher

1
Windows 7 sử dụng bộ đệm hình thu nhỏ cục bộ ( %userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_*.db), trừ khi tài nguyên ở xa (như trên chia sẻ mạng) tại thời điểm đó, nó sẽ sử dụng bộ thumbs.dblưu trữ ở vị trí từ xa (điều này có thể bị vô hiệu hóa bởi GP).
Ƭᴇcʜιᴇ007

2
upvote: mặc dù tôi không có tùy chọn Thumbnails Cache, sử dụng ProcMon cuối cùng đã đưa tôi đến một nơi nào đó, vì nó cung cấp bằng chứng về vấn đề, không giống như ProcessExplorer hoặc xử lý: chính xác 1 phút sau khi mở thư mục hoặc chạy exe, có IRP_MJ_CLEANUP Hoạt động từ quy trình Hệ thống dường như giải phóng tệp: ngay sau sự kiện đó tôi có thể xóa thư mục một lần nữa. Tôi sẽ đầu tư thêm nữa, nếu tôi có thể hiểu được những gì ProcMon cung cấp.
Stijn

3
@kinokijuf Tôi chỉ nhận thấy rằng bạn đã nhầm lẫn với câu trả lời của Ahers. Tôi không biết tại sao bạn lại làm việc đó, nhưng nó không có nghĩa gì: đầu tiên bạn nói, in đậm, rằng không có ngón tay cái.db. Sau đó, bạn chỉnh sửa câu trả lời của Asher để phần anh ấy nói cách vô hiệu hóa thums.db, làm cho nó không thể sử dụng được ("Không lưu trữ bộ nhớ cache" dành cho XP). Xin đừng làm những điều như vậy.
stijn

3

Bạn có chắc chắn rằng bạn chưa cài đặt bất kỳ sản phẩm bảo mật nào không?

Các kịch bản bạn mô tả tương thích với lý thuyết rằng một số sản phẩm đang truy cập vào mọi tệp thực thi được bạn truy cập theo bất kỳ cách nào có thể, khiến việc truy cập độc quyền vào nó là không thể. Đây không phải là một chương trình chống vi-rút, ví dụ, nó có thể là một trình lập chỉ mục để tìm kiếm nhanh hoặc bất cứ điều gì (thậm chí là vi-rút).

Người ta có thể kiểm tra lý thuyết này bằng cách khởi động ở chế độ An toàn trong đó không có sản phẩm nào ngoại trừ Windows được tung ra.

Công cụ tốt nhất để truy tìm tệp truy cập là Process Monitor . Một công cụ tuyệt vời khác để tìm tất cả các sản phẩm khởi động và tắt và bật lại là Autorun .


lập chỉ mục là của, tìm kiếm windows cũng tắt. Tôi không có công cụ tìm kiếm hoặc bảo mật của bên thứ 3 dưới bất kỳ hình thức nào; về cơ bản, đề xuất của bạn là vô hiệu hóa bất kỳ công cụ của bên thứ 3 nào trong chế độ tự động chạy, sau đó kích hoạt từng cái một?
stijn

Nếu điều này không xảy ra trong chế độ Khởi động an toàn, thì chắc chắn rằng một số sản phẩm được cài đặt phải chịu trách nhiệm. Bạn có thể sử dụng Autorun để vô hiệu hóa các mục khởi động theo lô và khởi động lại, cho đến khi bạn tìm thấy nó. Ưu điểm của Autorun là bạn có thể dễ dàng kích hoạt lại các mục, cũng như lưu / khôi phục / so sánh tình hình hiện tại. Nhưng tốt hơn hết là tạo điểm khôi phục hệ thống trước, chỉ trong trường hợp.
harrymc

vô hiệu hóa mọi thứ không phải microsoft trong Logon, Explorer, Internet Explorer và các dịch vụ. Vấn đề vẫn còn tồn tại. Có cách nào để so sánh những gì được tải trong chế độ bình thường và ở chế độ an toàn không?
stijn

Về cơ bản, mọi thứ bạn thấy trong Autorun chỉ được tải ở chế độ bình thường.
harrymc

Chà, ngoại trừ Dịch vụ, Mạng, v.v.
harrymc

2

Tập tin hoặc thư mục có thể được mở từ chế độ kernel, sau đó

handle -a

sẽ không hiển thị và ProcMon sẽ hiển thị các yêu cầu IRP từ / đến quy trình Hệ thống.

Có một phần của Windows Kernel được ánh xạ tới tất cả các quy trình và có một phần khác của Windows Kernel chạy trong quy trình riêng biệt. Cái sau được gọi là Windows Executive.

Vì vậy, điều này gây ra bởi tệp hoặc thư mục được mở từ chế độ kernel trong quy trình Windows Executive.


1

Nó có thể là biểu tượng đọc Explorer và siêu dữ liệu từ exe.


Đây là một lời giải thích có thể có cho Explorer, nhưng không phải cho studio hình ảnh trừ khi Explorer đang hiển thị thư mục này cùng một lúc. @stijn: Điều này có xảy ra trong studio hình ảnh mà không có Explorer không?
harrymc

@harrymc xem cập nhật, không xảy ra khi không có explorer (tốt, explorer.exe vẫn đang chạy, nhưng không có trong thư mục của exe)
stijn 27/11/11

Và làm thế nào để khắc phục vấn đề này?
Simon Sheehan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.