Как найти windows exe-путь

У меня есть служба Windows, и мне нужно создать каталог для хранения некоторой информации. Путь к каталогу должен относиться к файлу exe файла Windows. Как получить этот путь к файлу exe?

Ответ 2

Совет. Если вы хотите найти путь к запуску установленной службы Windows, посмотрите здесь из реестра.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ + ServiceName

Есть ключи об услугах Windows

Ответ 3

Вместо использования каталога относительно исполняемого файла и, следовательно, для использования прав администратора, почему бы не использовать общий каталог данных приложения, доступный через

Environment.GetFolderPath(SpecialFolder.CommonApplicationData)

Таким образом, вашему приложению не требуется доступ на запись в свой собственный каталог установки, что сделает вас более безопасным.

Ответ 4

Чтобы получить путь к сервису, вы можете использовать объект управления. ref: https://msdn.microsoft.com/en-us/library/system.management.managementobject(v=vs.110).aspx http://dotnetstep.blogspot.com/2009/06/get-windowservice-executable-path-in.html

using System.Management;
string ServiceName = "YourServiceName";
using (ManagementObject wmiService = new ManagementObject("Win32_Service.Name='"+ ServiceName +"'"))
                {
                    wmiService.Get();
                    string currentserviceExePath = wmiService["PathName"].ToString();
                    Console.WriteLine(wmiService["PathName"].ToString());
                }

Ответ 5

string exe = Process.GetCurrentProcess().MainModule.FileName;
string path = Path.GetDirectoryName(exe); 

svchost.exe - это исполняемый файл, который запускает вашу службу, которая находится в system32. Следовательно, нам нужно перейти к модулю, который выполняется процессом.

Ответ 6

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

System.Reflection.Assembly.GetEntryAssembly().Location

Ответ 7

Каталог по умолчанию для службы Windows - это папка System32. Однако в вашем сервисе вы можете изменить текущий каталог на каталог, указанный вами при установке службы, выполнив следующие действия в OnStart:

        // Define working directory (For a service, this is set to System)
        // This will allow us to reference the app.config if it is in the same directory as the exe
        Process pc = Process.GetCurrentProcess();
        Directory.SetCurrentDirectory(pc.MainModule.FileName.Substring(0, pc.MainModule.FileName.LastIndexOf(@"\")));

Изменить: еще более простой метод (но я еще не тестировал):

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);