سؤال

لدي فئة عداد أداء مخصصة.يرفض Visual Studio Server Explorer حذفه، مدعيًا أنه "غير مسجل أو فئة نظام".إذا لم يتم القيام بذلك برمجيًا، كيف يمكنني حذف الفئة؟هل يوجد مفتاح تسجيل يمكنني حذفه؟

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

المحلول

بقدر ما أعرف، هناك لا توجد وسيلة لحذفها بأمان إلا بطريقة برمجية (فهي مخصصة للتطبيقات لإنشائها وإزالتها أثناء التثبيت) ولكن من السهل القيام بها من خلال بوويرشيل وحدة تحكم سطر الأوامر.فقط قم بتشغيل هذا الأمر:

[Diagnostics.PerformanceCounterCategory]::Delete( "Your Category Name" )

لكن:(يحرر)

أنت يستطيع احذف مفتاح التسجيل الذي تم إنشاؤه، مما سيؤدي إلى اختفاء الفئة.

بالنسبة لفئة تسمى "الجرد"، يمكنك حذف المفتاح بالكامل في HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inventory ...و رغم ذلك لن أكون على استعداد للمراهنة على أن هذا ينظف كل شيء, ، هو - هي سوف جعل الفئة تختفي.(اذا ركضت مراقب العملية أثناء تشغيل طريقة الحذف()، يمكنك ملاحظة حدوث الكثير من الأنشطة الأخرى، ولا يبدو أن هناك أي نشاط آخر التغييرات صنع).

من المهم أن نلاحظ ذلك كما قلت في الأصل:عندما تحصل على هذا الخطأ من Visual Studio، قد يكون تم حذفه بالفعل وتحتاج إلى تحديث العرض في VS.في الاختبار الذي أجريته، اضطررت إلى إعادة تشغيل التطبيقات حتى أتمكن من الحصول على قائمة نظيفة بالفئات المتاحة.

يمكنك التحقق من القائمة الكاملة للفئات من PowerShell لمعرفة ما إذا كانت مدرجة أم لا:

[Diagnostics.PerformanceCounterCategory]::GetCategories() | Format-Table -auto

ولكن إذا قمت بفحصها، فقم بحذف مفتاح التسجيل ...ستستمر في الظهور، حتى تقوم بإعادة تشغيل PowerShell (إذا بدأت مثيلًا آخر، يمكنك تشغيل نفس الاستعلام هناك، ولن يُظهر العنصر المحذوف، ولكن إعادة تشغيل GetCategories في الأول ستستمر في عرضه.

بالمناسبة، يمكنك تصفية تلك القائمة إذا كنت تريد استخدام -like للأنماط، أو -match للتعبيرات العادية الكاملة:

[Diagnostics.PerformanceCounterCategory]::GetCategories() | Where {$_.CategoryName -like "*network*" } | Format-Table -auto
[Diagnostics.PerformanceCounterCategory]::GetCategories() | Where {$_.CategoryName -match "^SQL.*Stat.*" } | Format-Table -auto

نصائح أخرى

يمكنك أيضًا استخدام LinqPad، حيث أن ذلك لا يتضمن تثبيتًا من أي نوع - http://www.linqpad.net/.

قم بتشغيل التعليمة البرمجية التالية كـ "بيان (بيانات) C#":

System.Diagnostics.PerformanceCounterCategory.Delete("Name of category to delete");

قمت بتشغيله مرتين، المرة الأولى لإجراء الحذف الفعلي، والمرة الثانية للحصول على رسالة خطأ تؤكد نجاح عملية الحذف.

أعرف هذا السؤال إذا كان قديمًا ولكني وجدت طريقة للقيام بذلك بطريقة غير برمجية:http://msdn.microsoft.com/en-us/library/windows/desktop/aa372130%28v=vs.85%29.aspx

استخدم unlodctr من موجه الأوامر، وقد تحتاج أيضًا إلى استخدام lodctr /q للاستعلام عن فئتك.

أو قم بذلك بالطريقة الصعبة عن طريق تعديل مفتاح التسجيل (لا تحذفه):HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009http://msdn.microsoft.com/en-us/library/windows/desktop/aa373172%28v=vs.85%29.aspx

يمكنك تعطيله باستخدام أداة مجموعة موارد Microsoft - قم بتثبيته من

http://download.microsoft.com/download/win2000platform/exctrlst/1.00.0.1/nt5/en-us/exctrlst_setup.exe

أو تعطيله من التسجيل يدويا (لم أحاول) الموصوفة هنا

http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/94214.mspx?mfr=true

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