Объект процесса представлен классом System.Diagnostics.Process в .NET. Имя файла выполняющегося в данный момент exe-файла можно получить, вызвав Process.GetCurrentProcess().MainModule.FileName. Но этот метод получает только имя файла. Если рабочий каталог не переключается во время работы программы, вы можете вызвать метод System.IO.Path, чтобы получить абсолютный путь. Однако текущий каталог также можно получить через Environment.CurrentDirectory, и многие программы переключают рабочий каталог при использовании Open Dialog для открытия файла, что делает этот механизм неэффективным.
Если оно находится в приложении Windows Forms, текущее приложение также представлено как объект System.Windows.Forms.Application. С помощью его статических свойств Application.ExecutablePath и Application.StartupPath можно получить путь и путь запуска исполняемого файла. .
Но если его нет ни в Windows-приложении, ни в Библиотеке, даже если свойства объекта Приложение все равно можно получить, все равно нужно добавить в проект ссылку на сборку System.Windows.Forms, что очень неудобно. . В это время вы можете получить выполняющуюся в данный момент сборку с помощью статического метода сборки GetCallingAssembly или GetExecutingAssembly, а затем получить местоположение сборки с помощью местоположения класса сборки.
Однако при использовании сборки могут возникнуть проблемы с разрешениями. В то же время Assembly.GetCallingAssembly или Assembly.GetExecutingAssembly могут не получить расположение EXE-файла. Сборка со строгим именем, добавленная в GAC, не обязательно должна находиться в том же каталоге, что и .exe при запуске.
Когда запускается процесс .NET, будет создан AppDomain, и вся сборка будет загружена в определенный AppDomain. Атрибут SetupInformation предоставляется в AppDomain, который может получить некоторую информацию при запуске AppDomain. Поэтому вы можете вызвать AppDomain. .CurrentDomain.SetupInformation.ApplicationBase получает путь, по которому находится текущее приложение.
После получения необходимого каталога с помощью вышеуказанного метода вы можете вызвать метод System.IO.Path, чтобы получить имя файла, имя каталога, абсолютный путь и т. д. Прекратите анализ строк пути и вместо этого используйте класс System.IO.Path.
При разработке приложений под .NET понимание взаимосвязи между Процессом/Приложением->AppDomain->Assembly очень полезно для реализации правильной логики.