Frage

Wie kann ich alle Assemblys ermitteln, die meine .NET-Desktopanwendung geladen hat?Ich würde sie gerne in das Info-Feld einfügen, damit ich Kunden telefonisch befragen kann, welche Version von XYZ sie auf ihrem PC haben.

Es wäre schön, sowohl verwaltete als auch nicht verwaltete Assemblys zu sehen.Mir ist klar, dass die Liste lang werden wird, aber ich habe vor, sie schrittweise zu durchsuchen.

War es hilfreich?

Lösung

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);
    }
  }
}

Andere Tipps

Entweder das oder System.Reflection.Assembly.GetLoadedModules().

Beachten Sie, dass AppDomain.GetAssemblies nur Assemblys in iteriert aktuell AppDomain.Es ist möglich, dass eine Anwendung mehr als eine AppDomain hat, sodass sie möglicherweise das tut, was Sie wollen, oder auch nicht.

PowerShell-Version:

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

Sieht aus wie AppDomain.CurrentDomain.GetAssemblies(); wird den Zweck erfüllen :)

Für alle DLLs, einschließlich nicht verwalteter DLLs, können Sie EnumProcessModules per Pinvoke aufrufen, um die Modulhandles abzurufen, und dann GetModuleFileName für jedes Handle verwenden, um den Namen abzurufen.

Sehen http://pinvoke.net/default.aspx/psapi.EnumProcessModules Und http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net verfügt nicht über die Signatur dafür, aber es ist leicht herauszufinden).

Für 64-Bit müssen Sie EnumProcessModulesEx verwenden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top