Получение пути приложения - WPF против службы Windows - PullRequest
1 голос
/ 26 февраля 2010

Мне нужно знать надежный способ определения папки, из которой была запущена служба Windows. Способ определения этого, по-видимому, отличается от того, как вы определяете его в приложении WPF.

Подробнее (дополнительное чтение):

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

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

Теперь я пытаюсь создать установщик. Я переместил исполняемый файл службы Windows и исполняемый файл приложений wpf в один корневой каталог.

В приложении wpf я успешно создаю строку подключения к базе данных, которая указывает на встроенную базу данных, но в службе Windows я не успешно создаю эту строку подключения.

Ответы [ 3 ]

3 голосов
/ 26 февраля 2010

Чтобы получить каталог, в котором установлена ​​служба Windows, вы можете использовать:

        private string GetExeDir()
    {
        System.Reflection.Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();
        string codeBase = System.IO.Path.GetDirectoryName(ass.CodeBase);
        System.Uri uri = new Uri(codeBase);
        return uri.LocalPath;
    }
3 голосов
/ 26 февраля 2010

Получите основную сборку с Assembly.GetEntryAssembly. Там у вас будет свойство Location, сообщающее, где установлен ваш код.

Обратите внимание, что текущим каталогом службы является c: \ windows \ system32 (предполагается, что каталог установки по умолчанию).

2 голосов
/ 26 февраля 2010

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

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

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