Получение полного пути для службы Windows

Как узнать папку, в которой установлен файл .exe для Windows, установлен динамически?

Path.GetFullPath(relativePath);

возвращает путь на основе каталога C:\WINDOWS\system32.

Однако метод XmlDocument.Load(string filename) работает против относительного пути в каталоге, где установлен файл .exe службы.

Ответ 1

Try

System.Reflection.Assembly.GetEntryAssembly().Location

Ответ 3

Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)

Ответ 4

Это работает для нашей службы Windows:

//CommandLine without the first and last two characters
//Path.GetDirectory seems to have some difficulties with these (special chars maybe?)
string cmdLine = Environment.CommandLine.Remove(Environment.CommandLine.Length - 2, 2).Remove(0, 1);
string workDir = Path.GetDirectoryName(cmdLine);  

Это должно дать вам абсолютный путь к исполняемому файлу.

Ответ 5

Другая версия выше:

string path = Assembly.GetExecutingAssembly().Location;
FileInfo fileInfo = new FileInfo(path);
string dir = fileInfo.DirectoryName;

Ответ 6

Environment.CurrentDirectory возвращает текущий каталог, в котором запущена программа. В случае службы Windows возвращает% WINDIR%/system32, в котором будет выполняться исполняемый файл, а не где будет выполняться исполняемый файл.

Ответ 7

Это должно указывать путь, в котором находится исполняемый файл:

Environment.CurrentDirectory;

Если нет, вы можете попробовать:

Directory.GetParent(Assembly.GetEntryAssembly().Location).FullName

Более хакерский, но функциональный способ:

Path.GetFullPath("a").TrimEnd('a')

:)