سؤال

ولقد حصلت على التعليمات البرمجية التالية لانهاء العملية، ولكن أنا لا تزال تتلقى رمز خطأ 2 (تم رفض الوصول).

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'MSSEARCH.exe'")
For each objProcess in colProcessList
  wscript.echo objProcess.processid
  intrc = objProcess.Terminate()
  if intrc = 0 then wscript.echo "succesfully killed process" else wscript.echo "Could not kill process. Error code: " & intrc End if
هل كانت مفيدة؟

المحلول

وانها مشروعة تماما للحصول على "رفض الوصول" لإنهاء البرنامج. إذا كانت خدمة (التي انا التخمين mssearch.exe هو)، ثم فمن المحتمل تشغيل كمستخدم "النظام"، الذي لديه امتيازات أعلى حتى من حساب المسؤول.

لا يمكن تسجيل الدخول باسم حساب النظام، ولكن ربما يمكن كتابة خدمة لإدارة الخدمات الأخرى ...

نصائح أخرى

وكمستخدم غير متميز، يمكنك فقط وضع حد لعمليات لديك. في بيئة متعددة المستخدمين يمكن لدغة لك في الكاحل، لأن WMI سيعود العمليات اسمه على قدم المساواة من المستخدمين الآخرين كذلك، إلا أن تكتب استعلام WQL أكثر تحديدا.

إذا العملية الخاصة بك هي خدمة، ويدير السيناريو الخاص بك تحت حساب متميز، قد لا تزال بحاجة إلى اتخاذ "الطريق العادية" لوقف ذلك، على سبيل المثال باستخدام WScript.Shell للاتصال net stop أو sc.exe، أو، أكثر أناقة، وذلك باستخدام الطبقة Win32_Service:

Set Services = objWMIService.ExecQuery _
               ("SELECT * FROM Win32_Service WHERE Name = '" & ServiceName & "'")

For Each Service In Services
  Service.StopService()
  WSCript.Sleep 2000 ' wait for the service to terminate '
Next

إذا نظرتم في هذه الصفحة: HTTP: / /msdn.microsoft.com/en-us/library/aa393907(VS.85).aspx كنت أرى أن رمز الخطأ 2 هو رفض الوصول بدلا من ملف لم يتم العثور

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