การเข้าถึง Windows 7 ปฏิเสธที่จะปฏิบัติการ .. โดยอะไร


14

นับตั้งแต่ฉันเริ่มใช้ Windows 7 ปัญหานี้ทำให้ฉันรำคาญ ในบางครั้งฉันพบคำถามที่คล้ายกันปรากฏขึ้นในฟอรัมอื่น ๆ แต่ฉันไม่เคยเห็นคำตอบเลย ต่อไปนี้เป็นสถานการณ์สองสถานการณ์ที่ทำซ้ำได้เกือบทุกครั้ง:

วิธีสำรวจ

  1. ด้วย explorer ไปที่ไดเรกทอรีที่มีไฟล์ exe อย่างน้อยหนึ่งไฟล์
  2. ไปหนึ่งไดเรกทอรีทันที
  3. ลบไดเรกทอรีที่เพิ่งนำทางไป
  4. Yields Folder Access Deniedกล่องโต้ตอบที่ระบุว่าคุณต้องได้รับอนุญาตในการดำเนินการนี้คุณต้องได้รับอนุญาตจากผู้ดูแลระบบเพื่อทำการเปลี่ยนแปลงในโฟลเดอร์นี้โดยที่ปุ่มลองอีกครั้งและยกเลิก
  5. การลองใหม่อีกครั้งจะไม่ทำงานทันที รอสักครู่แล้วคลิกอีกครั้งก็ใช้งานได้

หมายเหตุ: หากอยู่ในขั้นตอนที่ 2 และรอหนึ่งนาทีหรือมากกว่าก่อนขึ้นไดเรกทอรีหนึ่งปัญหาจะไม่เกิดขึ้นและสามารถลบโฟลเดอร์ได้

วิธี Visual Studio

  1. สร้างโครงการที่สร้างไฟล์ exe
  2. เรียกใช้โปรแกรมปฏิบัติการจากนั้นปิด
  3. สร้างโครงการทันทีอีกครั้ง (โดยเปลี่ยนตัวอักษรตัวเดียวในไฟล์ต้นฉบับเป็นต้น)
  4. อัตราผลตอบแทนLNK1168 ข้อผิดพลาดร้ายแรง: ไม่สามารถเปิด /path/to/the.exe สำหรับการเขียน

หมายเหตุ: หากในขั้นตอนที่ 2 และรอหนึ่งนาทีหรือมากกว่าก่อนที่จะสร้างอีกครั้งปัญหาจะไม่เกิดขึ้น

รายละเอียดบางอย่าง

  • เกิดขึ้นทั้งบน Windows 7 32 และ 64 บิตด้วย VS2008 / 2010/2011
  • เกิดขึ้นกับ 3 เครื่องที่แตกต่างกัน
  • ฉันไม่มีเครื่องสแกนไวรัสทุกชนิด
  • ฉันปิดใช้งานบริการมากมาย แต่ไม่มีสิ่งใดที่ป้องกัน Windows ไม่ให้ทำงานตามปกติ UAC ก็ถูกปิดการใช้งานเช่นกัน
  • เกิดขึ้นกับแผ่นดิสก์ทุกประเภท
  • ฉันมักจะใช้บัญชีผู้ใช้ที่อยู่ในกลุ่มผู้ดูแล

เห็นได้ชัดว่าสถานการณ์ทั้งสองมีความคล้ายคลึงกันมากและทำซ้ำได้อย่างมาก ดังนั้นฉันคิดว่ากระบวนการบางอย่างจะต้องเปิดไฟล์ด้วยเหตุผลบางอย่างแล้วปล่อยอีกครั้งในภายหลัง อย่างไรก็ตามการใช้ sysinternals

handle -a

ไฟล์ exe ที่เป็นปัญหาจะไม่ปรากฏขึ้น (นั่นเป็นวิธีที่ถูกต้องในการใช้การจัดการใช่ไหม) ดังนั้นในขณะที่ explorer / VS กำลังรายงานว่าพวกเขาไม่สามารถเข้าถึงไฟล์ handle.exe บอกว่ามันไม่ได้ใช้งานทุกที่ สิ่งนี้ทำให้ฉันค่อนข้างไร้เดียงสาดังนั้นฉันจึงสงสัยว่าใครบางคนสามารถหาทางแก้ปัญหาได้: ทำไมจึงเกิดเหตุการณ์นี้ขึ้นและจะแก้ไขได้อย่างไร

อัปเดตเพื่อตอบคำถามที่ถาม:

  • ฉันไม่สามารถทำซ้ำปัญหาในเซฟโหมด
  • มีการติดตั้งส่วนขยายของเชลล์จำนวนมาก จาก SellExView ต่อไปนี้เป็นรายการที่ไม่ใช่ไมโครซอฟท์ที่ใช้ร่วมกับเครื่องทั้งหมด: NitroPDF, WinRAR, TortoiseGit, TortoiseSvn, NVidia ฉันจะพบเต่าที่น่าสงสัยที่สุดแม้ว่าตัวเลือก 'แคชสถานะ' จะถูกตั้งค่าเป็น 'แคชสถานะสำหรับโฟลเดอร์เดียวเท่านั้นไม่มีการซ้อนทับแบบเรียกซ้ำ' นั่นคือไม่มี TortoiseCache.exe ทำงานอยู่
  • ด้วยปัญหาของ explorer ProcessExplorer จะไม่แสดงไฟล์ที่เรียกทำงานได้ มันจะแสดงไดเรกทอรีของแฟ้มที่เรียกใช้งานได้ แต่ยังคงแสดงต่อไปแม้ว่าจะถูกลบไปแล้ว แต่ดูเหมือนว่าจะไม่เกี่ยวข้องกันจริงๆ
  • ด้วยปัญหา VS มันเกิดขึ้นกับ VS แม้ว่าจะไม่มีหน้าต่าง explorer เปิดอยู่ในไดเรกทอรีเป้าหมาย และอีกครั้ง ProcessExplorer จะไม่แสดงไฟล์ที่เรียกใช้งานได้และไม่มีไดเรกทอรีที่สามารถใช้งานได้โปรดทราบว่าใน 'โหมด' กับ VS ปัญหานี้จะเกิดขึ้นเฉพาะเมื่อเรียกใช้ไฟล์ปฏิบัติการ หากไม่ได้ใช้งานฉันสามารถสร้างได้โดยไม่มีปัญหาเป็นครั้งคราว
  • ใน 'โหมด VS' และหน้าต่าง explorer เปิดในไดเรกทอรีของปฏิบัติการ (ทดสอบด้วย C # exe เท่านั้น) มันจะทำให้ประหลาด: ฉันไม่สามารถสร้างได้อีกเพราะ VS บ่นว่า exe กำลังถูกใช้โดยกระบวนการอื่น อย่างไรก็ตามหากฉันลบ exe ออกจากหน้าต่างเปิด explorer การทำงานนี้จึงประสบความสำเร็จในการสร้าง อีกครั้งไม่มีการอ้างอิงใน ProcessExplorer ใด ๆ มีข้อใดที่ตรงกับสิ่งที่ฉันพบกับ handle.exe (ไม่ใช่ PE และตัวจัดการใช้ API เดียวกันภายในด้วย)

อัปเดต 2 ไม่สามารถเป็น explorer ได้: หลังจากสังหาร explorer.exe ปัญหา VS ยังคงอยู่ที่นั่น

อัปเดต 3 โดยใช้การตรวจสอบกระบวนการตามที่แอชแสดงให้เห็นข้อเท็จจริงที่น่าสนใจ: สำหรับโหมด explorer มีการเรียก IRP_MJ_CREATE 10 ครั้งเมื่อเปิดไดเรกทอรี อย่างไรก็ตามมีเพียง 9 การโทรไปยัง IRP_MJ_CLEANUP การเรียกทั้งหมดนี้มาจากภายใน shell32.dll ดังนั้นจึงไม่ใช่ปัญหาการติดตั้งของบุคคลที่สาม และเป็นที่แน่ชัดว่า IRP_MJ_CLEANUP หายไปซึ่งก่อให้เกิดปัญหา: 1 นาทีหลังจากเปิดไดเรคทอรีกระบวนการของระบบจะออกการเรียก IRP_MJ_CLEANUP และไฟล์ถูกปล่อยและถูกลบทิ้ง

อย่างไรก็ตามฉันยังไม่สามารถเข้าใจได้ว่าทำไมสิ่งนี้จึงเกิดขึ้น มันเป็นข้อผิดพลาดของ explorer ที่เกิดจากการเปลี่ยนแปลงบางอย่างที่ฉันทำหรือไม่?

วิธีการแก้! มองผ่านบริการที่ฉันมีคนพิการ, ผมสังเกตเห็นคำอธิบายสำหรับการประยุกต์ใช้ประสบการณ์กล่าวและฉันพูด, ประมวลผลการร้องขอแคชความเข้ากันได้ของโปรแกรมประยุกต์สำหรับการใช้งานที่พวกเขาจะเปิดตัว เสียงที่คุ้นเคย. และแน่นอนหลังจากเริ่มให้บริการฉันไม่สามารถสร้างปัญหาได้อีกต่อไปและผลลัพธ์ของ ProcMon นั้นแตกต่างกันและสั้นลง ตลก แต่เพราะหลังจากหยุดให้บริการอีกครั้งทุกอย่างยังคงดีและผลลัพธ์ของ procmon ยังคงสั้นกว่า

ฉันลองมันในสองเครื่องโดยมีสิ่งที่บุคคลที่ 3 ทำงานอย่างมีความสุขและทุกอย่างยังคงใช้ได้

ฉันไม่แน่ใจว่านี่เป็นข้อผิดพลาดจริงหรือไม่ (คุณสามารถคาดเดาได้ว่าจะปิดใช้งานบริการใด) แต่ก็ไม่ใช่เรื่องปกติที่ปัญหาจะหายไปเพียงแค่เริ่มบริการแล้วหยุดอีกครั้ง


Bounty ไปหาใครก็ตามที่สามารถให้ข้อมูลเชิงลึกเกี่ยวกับเรื่องนี้ได้อีกที่ @ Asher สำหรับการชี้ให้ฉันไปที่ ProcMon ซึ่งท้ายที่สุดก็พาฉันไปในทิศทางที่ถูกต้อง


2
คำถามเล็กน้อย. ปัญหา explorer เกิดขึ้นในเซฟโหมดหรือไม่ คุณติดตั้งส่วนขยายของเชลล์ไว้หรือไม่? ปัญหา Visual Studio ของคุณถ้าคุณเรียกใช้การตรวจสอบกระบวนการและกรองลงใน exe ของคุณมันแสดงให้เห็นสิ่งใดที่เข้าถึงไฟล์หรือไม่
sgmoore

แปลกทั้งสองสถานการณ์ที่คุณแนะนำให้ทำงานตามที่คาดไว้สำหรับฉัน (ไม่มีข้อผิดพลาด) เช่นเดียวกับ sgmoore แนะนำให้ใช้การตรวจสอบกระบวนการและตรวจสอบโฟลเดอร์ / ไฟล์
Ƭᴇcʜιᴇ007

@sgmoore ดูการปรับปรุง
stijn

คุณแน่ใจ 100% ว่าเป็นเพราะการโทรมาจาก shell32.dll ซึ่งเป็นไปตามกฎการติดตั้งของบุคคลที่สามหรือไม่ ฉันไม่รู้มากพอเกี่ยวกับสิ่งที่เกิดขึ้นในระดับที่ต่ำมาก ๆ เพื่อให้แน่ใจว่ามันเป็นเรื่องจริงหรือไม่ แต่ก็ไม่ใช่ข้อสันนิษฐานที่แน่นอนว่าฉันจะทำ
sgmoore

@sgmoore 100% ไม่ แต่ 99% ใช่ ข้อสรุปของฉันไม่ได้ขึ้นอยู่กับสิ่งที่ฉันเขียนที่นี่ ฉันมีสัญลักษณ์สำหรับที่กำลังระบบทั้งหมดดังนั้นฉันเห็นชื่อฟังก์ชั่นเต็มรูปแบบในการโทรของ procmon การโทรทั้งหมดที่ทำโดย explorer เมื่อเปิดไดเรกทอรีมาจากคลาสที่มีชื่อเช่น CLoadIconTask ชื่อที่เขียนว่า 'Microsoft' ทั้งหมด ฉันเป็นโปรแกรมเมอร์ดังนั้นฉันจึงมีความรู้เกี่ยวกับการตีความ callstacks ทุกอย่างที่ไม่ใช่ไมโครซอฟท์ยังคงปิดการใช้งานในการทำงานอัตโนมัติ ที่เครื่องอื่นมันไม่ได้ แต่เอาท์พุท procmon ทั้งหมดจะเหมือนกัน ปรีชา + ทั้งหมดเหล่านี้ทำให้ฉันเชื่อมั่นอย่างยิ่งว่าเป็น MS เท่านั้น
stijn

คำตอบ:


7

ฉันคิดว่าปัญหาที่คุณเห็นเกี่ยวข้องกับ thumbs.db ที่ Windows explorer สร้าง ลองปิดการใช้งานนี้รีบูตและดูว่าปัญหาเกิดขึ้นอีกหรือไม่

หากต้องการปิดใช้งาน thumbs.db เปิดตัวแก้ไขนโยบายกลุ่ม (gpedit.msc) ให้ไปที่การกำหนดค่าผู้ใช้ - แผงควบคุม> ตัวเลือกเทมเพลตการดูแลโฟลเดอร์> แท็บ Windows Components-Viev> Windows Explorer ค้นหา "ปิดการแคชภาพขนาดเล็กในไฟล์ thumbs.db ที่ซ่อนอยู่" และเปิดใช้งานอย่าใช้รูปขนาดย่อแคช

ถ้ามันไม่ทำงานฉันจะลองตรวจสอบโดยใช้ Sysinternals Process Monitor ใช้เพื่อดูว่าใครกำลังเข้าถึงโฟลเดอร์เมื่อคุณถูกปฏิเสธการเข้าถึง ดูว่าจริงๆแล้วการเข้าถึงถูกปฏิเสธหรือการละเมิดการแบ่งปันซึ่งหมายความว่าใครบางคนกำลังถือครองไฟล์


1
Thumbs.db ไม่มีอยู่ใน win7
kinokijuf

1
ใช่. ไปที่ตัวเลือกโฟลเดอร์และเปิดใช้งาน "แสดงไฟล์, โฟลเดอร์และไดรฟ์ที่ซ่อน"
Asher

1
Windows 7 ใช้แคชภาพขนาดย่อในเครื่อง ( %userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_*.db) เว้นแต่ว่าทรัพยากรนั้นอยู่ไกล (เหมือนในเครือข่ายที่ใช้ร่วมกัน) ณ จุดนี้มันจะใช้ที่thumbs.dbเก็บไว้ในสถานที่ห่างไกล (ซึ่งสามารถถูกปิดใช้งานโดย GP)
Ƭᴇcʜιᴇ007

2
upvoted: แม้ว่าฉันจะไม่มีตัวเลือกรูปขนาดย่อห้ามใช้แคชในที่สุดการใช้ ProcMon ก็ทำให้ฉันอยู่ที่ไหนสักแห่งเนื่องจากมีหลักฐานของปัญหาซึ่งแตกต่างจาก ProcessExplorer หรือหมายเลขอ้างอิง: 1 นาทีหลังจากเปิดไดเรกทอรีหรือใช้งาน exe มี IRP_MJ_CLEANUP การดำเนินการจากกระบวนการของระบบซึ่งดูเหมือนว่าจะปล่อยไฟล์: ทันทีหลังจากเหตุการณ์นั้นฉันสามารถลบไดเรกทอรีอีกครั้ง ฉันจะลงทุนเพิ่มเติมนี้หากฉันสามารถเข้าใจได้จากสิ่งที่ ProcMon มอบให้
stijn

3
@kinokijuf ฉันเพิ่งสังเกตว่าคุณยุ่งกับคำตอบของ Ahser ฉันไม่รู้ว่าทำไมคุณถึงทำ แต่มันไม่สมเหตุสมผล: ก่อนอื่นคุณพูดด้วยความกล้าหาญว่าไม่มี thumbs.db จากนั้นคุณแก้ไขคำตอบของแอชดังนั้นส่วนที่เขาบอกว่าจะปิดการใช้งาน thums.db ทำให้ไม่สามารถใช้งานได้ ("Do Not Cache Thumnbnails" สำหรับ XP) โปรดอย่าทำสิ่งนั้น
stijn

3

คุณแน่ใจหรือว่าคุณไม่ได้ติดตั้งผลิตภัณฑ์ความปลอดภัยใด ๆ

สถานการณ์ที่คุณอธิบายเข้ากันได้กับทฤษฎีที่ว่าผลิตภัณฑ์บางอย่างกำลังเข้าถึงไฟล์ปฏิบัติการทุกไฟล์ที่คุณเข้าถึงได้ในทุกวิถีทาง สิ่งนี้ไม่จำเป็นต้องเป็นโปรแกรมป้องกันไวรัสตัวอย่างเช่นมันอาจจะเป็นตัวทำดัชนีสำหรับการค้นหาที่รวดเร็วหรืออะไรก็ตาม (แม้แต่ไวรัส)

หนึ่งสามารถทดสอบทฤษฎีนี้โดยการบูตในเซฟโหมดที่ไม่มีผลิตภัณฑ์ยกเว้นสำหรับ Windows จะเปิดตัวเลย

เครื่องมือที่ดีที่สุดสำหรับการติดตามการเข้าถึงไฟล์เป็นกระบวนการตรวจสอบ อีกหนึ่งเครื่องมือที่ดีเยี่ยมสำหรับการหาผลิตภัณฑ์ที่เริ่มต้นและการปิดและเปิดอีกครั้งเป็นAutoruns


การจัดทำดัชนีเป็นของค้นหา windows ปิดเช่นกัน ฉันไม่มีความปลอดภัยจากบุคคลที่สามหรือเครื่องมือค้นหาใด ๆ คำแนะนำของคุณคือปิดการใช้งานเครื่องมือของบุคคลที่สามใด ๆ ในการทำงานอัตโนมัติแล้วเปิดใช้งานทีละรายการหรือไม่
stijn

หากสิ่งนี้ไม่ได้เกิดขึ้นในการบู๊ตในเซฟโหมดแสดงว่าแน่นอนว่าผลิตภัณฑ์ที่ติดตั้งบางตัวมีหน้าที่รับผิดชอบ คุณสามารถใช้การทำงานอัตโนมัติเพื่อปิดการใช้งานรายการเริ่มต้นในชุดและรีบูตจนกว่าคุณจะพบ ข้อได้เปรียบของการทำงานอัตโนมัติคือคุณสามารถเปิดใช้งานรายการได้อย่างง่ายดายรวมถึงบันทึก / กู้คืน / เปรียบเทียบสถานการณ์ปัจจุบัน แต่ยังคงสร้างจุดคืนค่าระบบก่อนดีกว่าในกรณี
harrymc

ปิดใช้งานทุกอย่างที่ไม่ใช่ไมโครซอฟต์ภายใต้การเข้าสู่ระบบ, Explorer, Internet Explorer และบริการ ปัญหายังคงมีอยู่ มีวิธีเปรียบเทียบสิ่งที่โหลดในโหมดปกติเทียบกับในเซฟโหมดหรือไม่
stijn

โดยพื้นฐานแล้วทุกสิ่งที่คุณเห็นใน Autoruns จะถูกโหลดในโหมดปกติเท่านั้น
harrymc

ดียกเว้นบริการเครือข่ายและอื่น ๆ
harrymc

2

สามารถเปิดไฟล์หรือไดเรกทอรีจากโหมดเคอร์เนลได้

handle -a

จะไม่แสดงและ ProcMon จะแสดงคำขอ IRP จาก / ถึงกระบวนการ

มีส่วนหนึ่งของเคอร์เนล Windows ซึ่งถูกแมปกับกระบวนการทั้งหมดและมีอีกส่วนหนึ่งของเคอร์เนล Windows ที่ทำงานในกระบวนการแยกต่างหาก หลังเรียกว่า Windows Executive

ดังนั้นสิ่งนี้เกิดจากไฟล์หรือไดเรกทอรีที่เปิดจากโหมดเคอร์เนลในกระบวนการ Windows Executive


1

อาจเป็น Explorer ที่อ่านไอคอนและข้อมูลเมตาจาก exe


นี่เป็นคำอธิบายที่เป็นไปได้สำหรับ Explorer แต่ไม่ใช่สำหรับ visual studio ยกเว้นว่า Explorer กำลังแสดงโฟลเดอร์นี้ในเวลาเดียวกัน @stijn: สิ่งนี้เกิดขึ้นใน visual studio โดยไม่มี Explorer หรือไม่
harrymc

@harrymc เห็นการปรับปรุงจะเกิดขึ้นโดยไม่ต้องสำรวจ (ดี explorer.exe จะยังคงทำงาน แต่ไม่ได้อยู่ในไดเรกทอรีของ exe ที่)
Stijn

และจะแก้ไขปัญหานี้ได้อย่างไร
Simon Sheehan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.