Das Prozessobjekt wird durch die Klasse System.Diagnostics.Process in .NET dargestellt. Der Dateiname der aktuell ausgeführten Exe kann durch Aufruf von Process.GetCurrentProcess().MainModule.FileName abgerufen werden. Diese Methode ruft jedoch nur den Dateinamen ab. Wenn das Arbeitsverzeichnis während der Programmausführung nicht gewechselt wird, können Sie die Methode System.IO.Path aufrufen, um den absoluten Pfad zu erhalten. Das aktuelle Verzeichnis kann jedoch auch über Environment.CurrentDirectory abgerufen werden, und viele Softwareprogramme wechseln das Arbeitsverzeichnis, wenn sie zum Öffnen einer Datei den Dialog „Öffnen“ verwenden, wodurch dieser Mechanismus unwirksam wird.
Wenn es sich um eine Windows Forms-Anwendung handelt, wird die aktuelle Anwendung auch als System.Windows.Forms.Application-Objekt dargestellt. Über ihre statischen Eigenschaften Application.ExecutablePath und Application.StartupPath können der Pfad und der Startpfad der ausführbaren Datei abgerufen werden .
Wenn es sich jedoch nicht in einer Windows-Anwendung oder in einer Bibliothek befindet, müssen Sie, selbst wenn die Eigenschaften des Anwendungsobjekts weiterhin abgerufen werden können, dennoch einen Verweis auf Assembly System.Windows.Forms im Projekt hinzufügen, was sehr unpraktisch ist . Zu diesem Zeitpunkt können Sie die aktuell ausgeführte Assembly über die statische Methode der Assembly, GetCallingAssembly oder GetExecutingAssembly, abrufen und dann den Speicherort der Assembly über den Standort der Assembly-Klasse abrufen.
Bei der Verwendung von Assembly können jedoch Berechtigungsprobleme auftreten. Gleichzeitig erhalten Assembly.GetCallingAssembly oder Assembly.GetExecutingAssembly möglicherweise nicht den Speicherort der .exe-Datei. Die Assembly mit einem starken Namen, der dem GAC hinzugefügt wird, muss sich bei der Ausführung nicht im selben Verzeichnis wie die EXE-Datei befinden.
Wenn der .NET-Prozess startet, wird eine AppDomain erstellt und die gesamte Assembly wird in eine bestimmte AppDomain geladen. Das SetupInformation-Attribut wird beim Start der AppDomain bereitgestellt. Daher können Sie AppDomain aufrufen .CurrentDomain.SetupInformation. .ApplicationBase ruft den Pfad ab, in dem sich die aktuelle Anwendung befindet.
Nachdem Sie das erforderliche Verzeichnis über die obige Methode abgerufen haben, können Sie die Methode System.IO.Path aufrufen, um den Dateinamen, den Verzeichnisnamen, den absoluten Pfad usw. abzurufen. Hören Sie auf, Pfadzeichenfolgen zu analysieren, und verwenden Sie stattdessen die Klasse System.IO.Path.
Bei der Entwicklung von Anwendungen unter .NET ist das Verständnis der Beziehung zwischen Process/Application->AppDomain->Assembly für die Implementierung der richtigen Logik sehr hilfreich.