C # Служба Windows, похоже, не нравится privatePath - PullRequest
2 голосов
/ 23 апреля 2010

Я написал C # Windows Service для управления расписанием задач для нашего приложения. Я пытаюсь переместить сборки «бизнес-правил» в подкаталог bin приложения планирования, чтобы упростить нам обновление (остановка службы, удаление всех файлов в папке bin, замена новыми, запуск службы).

Я добавил

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <probing privatePath="bin;"/>
  </assemblyBinding>
</runtime>

в конфигурацию приложения службы, и она отлично работает, если служба запускается как консольное приложение. Проблема в том, что когда служба запускается как служба Windows, она не работает. Похоже, что когда Windows запускает службу, файл конфигурации приложения читается правильно, но затем служба выполняется так, как если бы она находилась в каталоге c: \ windows \ system32, а не в самом месте EXE, и это приводит к сбоям в работе.

У нас много сборок, поэтому я действительно не хочу использовать GAC или <codeBase>. Возможно ли, чтобы EXE изменил свой базовый каталог обратно туда, где он должен быть при запуске в качестве службы?

Ответы [ 2 ]

1 голос
/ 01 мая 2010

Оказывается, я был не прав. PrivatePath отлично работает даже из службы Windows. Проблема заключалась в том, что я добавил раздел <runtime> в начало файла app.config, который выдает ошибку, поскольку <configSections> не является первым элементом в файле. Однако служба все еще сигнализировала, что она запустилась нормально (что-то, что мы должны исправить), и файл журнала, используемый для ошибок запуска, записывался в каталог, отличный от каталога с EXE (что-то еще, что мы должны исправить), как только я переместил <runtime> блок на свое место в app.config все работало отлично.

Спасибо за комментарий к fuslogvw.exe, я бы дал вам ответ, если смогу. Это позволило мне увидеть, что за privatePath следовали и что ошибка была в другом месте.

0 голосов
/ 23 апреля 2010

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

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