Как найти сервис окон exe путем

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

56
задан 14 May 2010 в 12:09
поделиться

4 ответа

Вы можете использовать AppDomain.CurrentDomain.BaseDirectory

105
ответ дан 26 November 2019 в 17:01
поделиться
string exe = Process.GetCurrentProcess().MainModule.FileName;
string path = Path.GetDirectoryName(exe); 

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

8
ответ дан 26 November 2019 в 17:01
поделиться

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

Environment.GetFolderPath(SpecialFolder.CommonApplicationData)

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

13
ответ дан 26 November 2019 в 17:01
поделиться

Каталог по умолчанию для службы 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);
5
ответ дан 26 November 2019 в 17:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: