سؤال

كيف يمكنني تحديد كافة التجميعات التي قام بتحميلها تطبيق سطح المكتب .NET الخاص بي؟أرغب في وضعها في المربع "حول" حتى أتمكن من الاستعلام عن العملاء عبر الهاتف لتحديد إصدار XYZ الموجود لديهم على أجهزة الكمبيوتر الخاصة بهم.

سيكون من الجيد رؤية التجميعات المُدارة وغير المُدارة.أدرك أن القائمة سوف تطول ولكني أخطط لإجراء بحث إضافي عليها.

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

المحلول

using System;
using System.Reflection;
using System.Windows.Forms;

public class MyAppDomain
{
  public static void Main(string[] args)
  {
    AppDomain ad = AppDomain.CurrentDomain;
    Assembly[] loadedAssemblies = ad.GetAssemblies();

    Console.WriteLine("Here are the assemblies loaded in this appdomain\n");
    foreach(Assembly a in loadedAssemblies)
    {
      Console.WriteLine(a.FullName);
    }
  }
}

نصائح أخرى

إما ذلك، أو System.Reflection.Assembly.GetLoadedModules().

لاحظ أن AppDomain.GetAssemblies سوف يقوم فقط بتكرار التجميعات في ملف حاضِر مجال التطبيق.من الممكن أن يحتوي التطبيق على أكثر من AppDomain واحد، لذلك قد يفعل أو لا يفعل ما تريد.

نسخة بوويرشيل:

[System.AppDomain]::CurrentDomain.GetAssemblies()

يشبه AppDomain.CurrentDomain.GetAssemblies(); سوف تفعل الخدعة :)

بالنسبة لجميع ملفات DLL بما في ذلك غير المُدارة، يمكنك تثبيت EnumProcessModules للحصول على مقابض الوحدة ثم استخدام GetModuleFileName لكل مقبض للحصول على الاسم.

يرى http://pinvoc.net/default.aspx/psapi.EnumProcessModules و http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (لا يحتوي موقع pinvoc.net على التوقيع الخاص بهذا ولكن من السهل اكتشافه).

بالنسبة للإصدار 64 بت، تحتاج إلى استخدام EnumProcessModulesEx

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