كيف يمكنني تحديد ما إذا كان هناك ملف معين مفتوح في نظام التشغيل Windows؟[مغلق]

StackOverflow https://stackoverflow.com/questions/15708

سؤال

إحدى أدواتي المفضلة لنظام التشغيل Linux هي lsof - سكين الجيش السويسري الحقيقي!

وجدت نفسي اليوم أتساءل عن البرامج الموجودة على نظام WinXP والتي تحتوي على ملف معين مفتوح.هل هناك أي فائدة مكافئة لـ lsof؟بالإضافة إلى ذلك، كان الملف المعني عبر مشاركة عبر الشبكة، لذا لست متأكدًا مما إذا كان ذلك يزيد الأمور تعقيدًا.

هل كانت مفيدة؟

المحلول

يستخدم عملية المستكشف من Sysinternals Suite، ستتيح لك وظيفة Find Handle أو DLL البحث عن العملية مع فتح هذا الملف.

نصائح أخرى

أي ما يعادل lsof -p pid هو الناتج المدمج من مقبض sysinternals وlistdlls، أي

handle -p pid
listdlls -p pid

يمكنك معرفة معرف المنتج باستخدام sysinternals pslist.

يحاول مقبض. فيلمون & ريجمون تعتبر أيضًا رائعة لمحاولة اكتشاف ما يفعله برنامج duce foo بنظامك.

يعادل واحد lsof يمكن دمج المخرجات من Sysinternals مقبض و listdlls, ، أي.:

c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
   10: File  (RW-)   C:\Windows
   1C: File  (RW-)   D:\some\locked\path\OpenFile.txt
[...]

c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls

  Base        Size      Version         Path
  0x00400000  0x29000   2.25.0000.0000  D:\opt\SysinternalsSuite\Listdlls.exe
  0x76ed0000  0x180000  6.01.7601.17725  C:\Windows\SysWOW64\ntdll.dll
[...]

c:\SysInternals>listdlls

لسوء الحظ، يجب عليك "التشغيل كمسؤول" لتتمكن من استخدامها.

أيضًا listdlls و مقبض لا تنتج نموذجًا يشبه الجدول المستمر، لذا فإن تصفية اسم الملف ستؤدي إلى إخفاء PID. findstr /c:pid: /c:<filename> يجب أن يجعلك قريبًا جدًا من كلتا الخدمتين، بالرغم من ذلك

c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
  188: File  (RW-)   D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]

هنا يمكننا أن نرى أن gvim.exe هو الذي يفتح هذا الملف.

يحاول أونلوكر.

يحتوي موقع أونلوكر على مخطط أنيق (قم بالتمرير لأسفل بعد اتباع الرابط) يعرض مقارنة بالأدوات الأخرى.من الواضح أن مثل هذه المقارنات عادة ما تكون متحيزة نظرًا لأنها عادةً ما تكون مكتوبة بواسطة مؤلف الأداة، ولكن الرسم البياني على الأقل يسرد البدائل بحيث يمكنك تجربتها بنفسك.

إذا كان الملف .dll فيمكنك استخدام الملف قائمة المهام تطبيق سطر الأوامر لمعرفة من قام بفتحه:

TaskList /M nameof.dll

إذا نقرت بزر الماوس الأيمن على أيقونة "الكمبيوتر" (أو "جهاز الكمبيوتر") واخترت "إدارة" من القائمة المنبثقة، فسينقلك ذلك إلى وحدة تحكم إدارة الكمبيوتر.

هناك، ضمن أدوات النظام\المجلدات المشتركة، ستجد "فتح الملفات".من المحتمل أن يكون هذا قريبًا مما تريده، ولكن إذا كان الملف موجودًا على مشاركة عبر الشبكة، فستحتاج إلى القيام بنفس الشيء على الخادم الذي يوجد عليه الملف.

يوجد برنامج "OpenFiles" يبدو أنه جزء من نظام التشغيل Windows 7.ويبدو أنه يمكن أن تفعل ما تريد.يمكنه سرد الملفات التي فتحها المستخدمون عن بُعد (من خلال مشاركة الملف) ، وبعد استدعاء "OpenFiles /Local ON" وإعادة تشغيل النظام ، يجب أن يكون قادرًا على عرض الملفات المفتوحة محليًا.ويقال أن الأخير لديه عقوبات الأداء.

استخدم Process Explorer للعثور على معرف العملية.ثم استخدام مقبض لمعرفة الملفات المفتوحة.

على سبيل المثال مقبض -p

يعجبني هذا الأسلوب لأنك تستخدم أدوات مساعدة من Microsoft نفسها.

في عرض الملفات المفتوحة, ، ضمن قائمة الخيارات، يوجد عنصر قائمة يسمى "إظهار ملفات الشبكة".ربما مع تمكين ذلك، تكون الأداة المذكورة أعلاه ذات فائدة معينة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top