Подтвердить что ты не робот

Как найти каталог установки службы Windows с помощью С#?

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

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

4b9b3361

Ответ 1

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

String path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = System.IO.Path.GetDirectoryName(path);
Directory.SetCurrentDirectory(path);

Ответ 2

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

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

Ответ 3

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

Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;

Ответ 4

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

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

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

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

Ответ 5

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

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