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


как я могу узнать папку, в которой находится служба windows .exe файл устанавливается динамически?

Path.GetFullPath(relativePath);

возвращает путь на основе .

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

7 57

7 ответов:

попробовать

System.Reflection.Assembly.GetEntryAssembly().Location

попробуйте это:

AppDomain.CurrentDomain.BaseDirectory

(как здесь: как найти путь exe службы windows)

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

это работает для нашей службы 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);  

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

другое версию:

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

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

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

Environment.CurrentDirectory;

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

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

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

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

:)