Как найти каталог установки службы Windows, используя C #? - PullRequest
19 голосов
/ 29 января 2009

Я почти уверен, что служба Windows получает C: \ winnt (или аналогичный) в качестве своего рабочего каталога при установке с помощью InstallUtil.exe. Можно ли каким-либо образом получить доступ к каталогу, из которого изначально была установлена ​​служба, или каким-либо другим образом получить (во время установки)? На данный момент я вручную ввожу это в файл app.exe.config, но это ужасно вручную и выглядит как хак.

Есть ли программный способ, во время выполнения или во время установки, определить, откуда была установлена ​​служба?

Ответы [ 5 ]

34 голосов
/ 29 января 2009

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

String path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = System.IO.Path.GetDirectoryName(path);
Directory.SetCurrentDirectory(path);
7 голосов
/ 29 января 2009

Вы хотите иметь в виду каталог, содержащий сборку? Если это так, это просто: используйте Assembly.Location.

Я бы не стал пытаться изменить рабочую директорию процесса - я не удивлюсь, если у этого будут неприятные побочные эффекты, если вам действительно разрешено это делать.

5 голосов
/ 10 мая 2010

Я не знал метод Directory.SetCurrentDirectory. Обычно я делаю:

Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
3 голосов
/ 24 января 2013

Хоть и очень поздно, но это может кому-то помочь. Я решил эту проблему с помощью AppDomain.CurrentDomain.BaseDirectory

string someFilePath = AppDomain.CurrentDomain.BaseDirectory + @"\Resources\SomeResource.xml";

AppDomain.CurrentDomain.BaseDirectory предоставляет каталог, в котором фактически была установлена ​​служба Windows, а не C: \ Windows \ system32 \ path.

Позже я увидел, что @Ramon уже опубликовал такое же решение.

2 голосов
/ 29 января 2009

InstallUtil.exe вызывает ServiceInstaller.Install() вашего приложения во время установки.

Переопределите его, добавьте его в список Installers вашего проекта и получите любую необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...