I’ve developed a windows service application using Visual Studio 2008 / C#.
I have an app.config file in the project. When installed, the app.exe.config file appears beside the executable but it appears not to be reading the values from it when I try to access them through ConfigurationManager.AppSettings.
Has it copied the config file elsewhere or is there some other problem I don’t know about?
Thanks in advance,
Martin.
Edit:
The config file name is infact my_exe_file_name.exe.config, it looks like:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="RuntimeFrequency" value="3" />
</appSettings>
</configuration>
and I am trying to read via:
ConfigurationManager.AppSettings["RuntimeFrequency"]
The debug value I continually see is ‘1’ and not ‘3’. Am I doing something wrong here?
asked Jan 13, 2009 at 15:23
I located the error and it was related to file permissions. After installing the service, my local user account didn’t have access to modify the app.exe.config file.
The tool I was using to edit was not informing me it was being denied access to save the file — that’s notepad++ if anyone is interested — so I couldn’t see that it wasn’t saving over the old config file.
Solved now, thanks everyone.
Martin.
answered Jan 14, 2009 at 10:26
2
When you are in debug mode check and see what settings are in the my_exe_file_name.vshost.exe.config Also make sure you adjust this in the app.config file. Visual studio should update the final config file in your bin/debug folders.
answered Jan 13, 2009 at 18:10
Aaron FischerAaron Fischer
20.9k18 gold badges76 silver badges116 bronze badges
Maybe you are updating the wrong config file. You should double check that using
System.Configuration.ConfigurationManager.OpenExeConfiguration(PATH_TO_CONFIG);
answered Jan 13, 2009 at 15:43
Igor ZelayaIgor Zelaya
4,1774 gold badges36 silver badges52 bronze badges
Generally for the Windows Services that I write, i drop the appName.exe.config file into C:\WINDOWS\system32\
Perhaps you have an older version in that directory, which is where your service is getting the value, even though you’ve updated the config file in your project.
answered Jan 13, 2009 at 18:03
Dave BaghdanovDave Baghdanov
2,3085 gold badges24 silver badges35 bronze badges
3
App.config file should be renamed to your_exe_file_name.exe.config and placed near the exe file.
answered Jan 13, 2009 at 15:25
Alex ReitbortAlex Reitbort
13.5k1 gold badge41 silver badges62 bronze badges
Is it possible that you have more than one instance of the RuntimeFrequency entry defined? The ConfigurationManager reads the file from top to bottom and processes each setting individually. Therefore, the last value of RuntimeFrequency that is defined in the file is the one it will use.
If you want to know for sure if your file is being used, I would simply remove or comment out any definition for RuntimeFrequency (copy/paste errors do happen) and wait to see an application error when ConfigurationManager attempts to reference an entry in AppSettings that does not exist.
answered Jan 13, 2009 at 16:03
В данной статье будет рассказано о том, как отредактировать параметры запуска служб в Windows на примере службы «Агент сервера 1С:Предприятия 8.3». Будет показано как настроить тип запуска служб, изменить учетные данные для запуска службы, а также изменить параметры запуска исполняемого файла службы.
0. Оглавление
- Изменение свойств запуска службы
- Изменение параметров запуска исполняемого файла службы
1. Изменение настроек запуска службы
Предположим у нас имеется работающая служба, пусть это будет «Агент сервера 1С:Предприятия 8». Для того что бы отредактировать свойства запуска данной службы перейдем в оснастку «Службы» (Services).
В Microsoft Windows Server 2012 эту оснастку можно найти в Диспетчере серверов (Server Manager), пункт меню «Средства» (Tools) — «Службы» (Services).
В Microsoft Windows Server 2008 R2 в меню «Пуск» (Start) — «Администрирование» (Administrative Tools) — «Службы» (Services)
Ну или в любой версии Windows можно выполнить команду services.msc. Для этого необходимо нажать комбинацию клавиш Win + R, в открывшемся окне «Выполнить» (Run) ввести имя команды в поле «Открыть» (Open) и нажать «ОК».
Далее в открывшейся оснастке, в списке служб находим службу, параметры запуска которой необходимо отредактировать.
Кликаем два раза по имени службы, чтобы открыть ее свойства. В окне свойств службы можно отредактировать нижеперечисленные параметры запуска службы.
На закладке «Общие» (General) можно настроить тип запуска службы (Startup type) — Автоматически (Automatic), Вручную (Manual), Отключена (Disabled) или Автоматически (отложенный запуск) (Automatic (Delayed Start)), выбрав соответствующий вариант из списка. А также возможно Остановить (Stop), Приостановить (Pause) или Запустить (Start) данную службу.
На закладке «Вход в систему» (Log on) можно настроить параметры учетной записи (account), от которой будет запускаться выбранная служба. Возможно настроить запуск от системной учетной записи (Local System account), или выбрать конкретного пользователя Windows, указав его имя и пароль.
На закладке «Восстановление» (Recovery) можно задать действия, которые будет выполнять система при сбое службы.
На закладке «Зависимости» (Dependencies) можно настроить зависимость запуска службы от различных компонент системы.
2. Изменение параметров запуска исполняемого файла службы
В окне свойств службы, на закладке «Общие» (General) возможно просмотреть путь к исполняемому файлу службы, а также увидеть передаваемые для его запуска параметры.
Однако эта информация доступна только для чтения. Изменить строку запуска исполняемого файла службы можно с помощью системного реестра Windows.
Для запуска системного реестра, следует выполнить команду regedit.exe. Для этого необходимо нажать комбинацию клавиш Win + R, в открывшемся окне «Выполнить» (Run) ввести имя команды в поле «Открыть» (Open) и нажать «ОК».
В первую очередь при работе с реестром Windows необходимо сделать бэкап, выполнив экспорт всего реестра.
После этого в дереве папок слева переходим по пути:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Затем в списке выделим группу с именем службы, свойства которой необходимо отредактировать. При этом, в окне справа увидим все параметры данной службы.
Кликаем 2 раза по имени параметра, который необходимо изменить и вводим новое значение.
Например, пусть нам необходимо запустить сервер «1С:Предприятие» в режиме отладки, т. е. добавить в строку запуска параметр -debug. Для этого меняем значение параметра ImagePath.
Нажимаем «ОК», для сохранения изменений и закрываем редактор реестра.
Перезапускаем службу для того, чтобы изменения вступили в силу. Сделать это моно также из оснастки «Службы» (Services), кликнув правой кнопкой мыши по имени службы в списке и выбрав в контекстном меню «Перезапустить» (Restart).
На этом все. Изменения вступили в силу, соответственно агент сервера запущен в режиме отладки.
Настройка служб с использованием файлов конфигурации
-
.NET
Framework 4
Настройка
службы Windows Communication Foundation (WCF) с помощью
файла конфигурации обеспечивает гибкость
предоставления данных по конечной точке
и поведению службы непосредственно в
точке развертывания, а не во время
разработки. В этой теме представлено
описание основных доступных методов.
Службу
WCF можно настроить с помощью технологии
конфигурации .NET Framework. Чаще всего элементы
XML добавляются в файл Web.config для узла
служб IIS, на котором размещена служба
WCF. Эти элементы позволяют изменять
данные, такие как адреса конечных точек
(фактические адреса, используемые для
взаимодействия со службой), по схеме
компьютер-компьютер. Кроме того, WCF
включает в себя несколько предоставляемых
системой элементов, которые позволяют
быстро выбрать для службы самые основные
функции. Начиная с версии .NET Framework 4, в
WCF входит новая модель конфигурации по
умолчанию, которая обладает упрощенными
требованиями к настройке WCF. Если для
службы не указана конфигурация WCF, то
среда выполнения автоматически выполняет
настройку службы, указывая некоторые
стандартные конечные точки, привязку
и поведение по умолчанию. На практике
запись конфигурации является основной
частью процесса программирования
приложений WCF.
Дополнительные
сведения см. вНастройка
привязок для служб Windows Communication Foundation.
Для списка наиболее часто используемых
элементов см. в разделеПривязки,
предоставляемые системой. Дополнительные
сведения о о конечных точках по умолчанию,
привязках и поведениях см. в разделахУпрощенная
конфигурацияиУпрощенная
конфигурация служб WCF.
Важно |
При |
System.Configuration:
Web.config и
App.config
WCF
использует систему конфигурации
System.Configuration .NET Framework.
Во
время настройки службы в Visual Studio
используйте либо файл Web.config, либо файл
App.config, чтобы задать параметры. Выбор
имени файла конфигурации определяется
выбранной для службы средой размещения.
Если служба размещается с помощью IIS,
используйте файл Web.config. Если служба
размещается с помощью другой среды
размещения, используйте файл App.config.
В
Visual Studio файл с именем App.config используется
для создания окончательного файла
конфигурации. Окончательное имя, которое
фактически используется для конфигурации,
зависит от имени сборки. Например, сборка
с именем «Cohowinery.exe» имеет имя
окончательного файла конфигурации
«Cohowinery.exe.config». Однако следует
изменить только файл App.config. Изменения,
внесенные в это файл, автоматически
вносятся в окончательный файл конфигурации
приложения во время компиляции.
При
использовании файла App.config система
конфигурации объединяет файл App.config с
содержимым файла Machine.config, когда
запускается приложение и применяется
конфигурация. Этот механизм позволяет
определить параметры в рамках всего
компьютера в файле Machine.config. Файл
App.config можно использовать для переопределения
параметров файла Machine.config. Также
предусмотрена возможность блокировки
в параметрах файла Machine.config согласно
привычной работе. Если используется
файл конфигурации Web.config, то система
объединяет файлы Web.config во всех родительских
каталогах, вплоть до каталога приложения
в применяемой конфигурации. Дополнительные
сведения о о конфигурации и приоритетах
параметров см. разделы в пространстве
имен System.Configuration.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Последнее обновление: 12.06.2018
ASP.NET Core можно развертывать в виде обычной службы Windows без каких-либо веб-серверов, в частности, IIS.
Создадим новый проект ASP.NET Core 2.1 любого типа. Прежде всего, нам надо добавить в проект через Nuget пакет
Microsoft.AspNetCore.Hosting.WindowsServices.
После создания проекта обратимся к файлу Program.cs, который во всех проектах выглядит идентично:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace ServiceHostingApp { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); } }
Изменим его следующим образом:
using System.Diagnostics; using System.IO; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.WindowsServices; namespace ServiceHostingApp { public class Program { public static void Main(string[] args) { // получаем путь к файлу var pathToExe = Process.GetCurrentProcess().MainModule.FileName; // путь к каталогу проекта var pathToContentRoot = Path.GetDirectoryName(pathToExe); // создаем хост var host = WebHost.CreateDefaultBuilder(args) .UseContentRoot(pathToContentRoot) .UseStartup<Startup>() .Build(); // запускаем в виде службы host.RunAsService(); } } }
Чтобы запустить приложение в виде службы у объекта IWebHost вызывается метод RunAsService().
Публикация
Теперь нам надо опубликовать приложение в файловой системе. Мы можем это сделать через консоль с помощью команды dotnet publish
.
Для этого вначале в командной строке/терминале надо перейти к папке проекта и из нее запустить команду:
dotnet publish --configuration Release --runtime win10-x64 --output c:\myapp
Поскольку приложение будет устанавливаться в виде службы Windows и должно иметь исполняемый файл, то указывается
параметр --runtime
. В данном случае служба будет устанавливаться на Windows 10 с 64-битной архитектурой. Поэтому
для этого параметра указано значение win10-x64
.
Параметр --output
указывает, где будет опубликовано приложение — то есть в данном случае в папке c:\myapp.
Также можно поизвести публикацию с помощью графических средств в Visual Studio.
Создание службы
После публикации с помощью консольной утилиты sc.exe создадим службу:
sc create НАЗВАНИЕ_СЛУЖБЫ binPath= "ПУТЬ К ИСПОЛНЯЕМОМУ ФАЙЛУ EXE"
После команды create
указывается имя службы. Службу можно назвать как угодно.
Параметр binPath
указывает на путь к исполняемому файлу (в том числе имя самого файла).
Причем между знаком равно и путем к файлу в кавычках должен идти пробел.
Например, ранее приложение было опубликовано в папке c:\myapp. Как правило, название исполняемого файла соответствует названию проекта, то есть в моем случае
в папке c:\myapp после публикации находится исполняемый файл ServiceHostingApp.exe
. И, допустим, служба буде называться
MyAspService. В этом случае команда на создание службы будет выглядеть следующим образом:
sc create MyAspService binPath= "c:\myapp\servicehostingapp.exe"
Запуск службы
После установки службы запустим ее с помощью команды:
Команде start
передается имя ранее установленной службы — в моем случае это MyAspService.
После установки мы можем обратиться обратиться к нашему веб-приложению из браузера по адресу http://localhost:5000:
Если вы похожи на большинство пользователей Windows, у вас есть множество замечательных маленьких утилит, которые запускаются при запуске Windows. Хотя это отлично работает для большинства приложений, некоторые из них было бы неплохо запустить даже до того, как пользователь войдет в систему на ПК. Для этого вам нужно запустить приложение как службу Windows.
Службы Windows
представляют собой специальный класс программ, которые настроены для запуска и работы в фоновом режиме, обычно без какого-либо пользовательского интерфейса и без необходимости входа пользователя в систему на ПК. Многие геймеры и опытные пользователи знают их как те вещи, которые вы отключили, чтобы ускорить работу вашей системы.
это действительно больше не нужно
.
Основное преимущество запуска приложения как службы заключается в том, что вы можете запустить программу до того, как пользователь войдет в систему. Это может быть особенно важно для приложений, которые предоставляют важные службы, которые вы хотите быть доступны, когда вы находитесь вдали от компьютера.
СВЯЗАННЫЕ С:
Понимание и управление службами Windows
Прекрасным примером этого является
Plex
, приложение медиа-сервера, которое может передавать локальный контент практически на любое ваше устройство. Конечно, вы могли бы оставить его на панели задач, как обычную программу, но что, если компьютер перезагрузится из-за отключения электроэнергии или запланированных обновлений? Пока вы снова не войдете в систему на ПК, Plex будет недоступен. Это раздражает, если вам приходится бежать в другую комнату, чтобы снова запустить Plex, пока ваш попкорн остывает, и очень раздражает, если вы находитесь за городом и пытаетесь транслировать свои медиа через Интернет. Настройка Plex как службы решит эту проблему.
Прежде чем начать, вы должны знать о нескольких важных предостережениях при запуске приложения как службы:
- Приложение не будет размещать значок на панели задач. Если вам нужен интерфейс, регулярно доступный для приложения, он может не подходить для работы в качестве службы.
- Когда вам нужно внести изменения или обновления в конфигурацию, вам нужно будет остановить службу, запустить программу как обычное приложение, сделать то, что вам нужно, остановить программу, а затем снова запустить службу.
-
Если программа уже настроена для запуска при запуске Windows, вам необходимо отключить ее, чтобы не было запущено два экземпляра. У большинства программ есть опция в интерфейсе для переключения этого параметра. Другие могут добавить себя в ваш
Папка автозагрузки
, чтобы вы могли удалить их там.
Готовы катиться? Поговорим о том, как это настроить.
Шаг первый: установите SrvStart
Чтобы запустить приложение как услугу, вам понадобится небольшая сторонняя утилита. Их несколько, но наш любимый —
SrvStart
. Первоначально он был разработан для Windows NT и будет работать практически с любой версией Windows, начиная с Windows XP.
Для начала перейдите в
Страница загрузки SrvStart
и возьмите утилиту. Скачивание содержит всего четыре файла (два DLL и два EXE-файла). Установщика нет; вместо этого скопируйте их на свой компьютер
C: \ Windows
вложите их в основную папку Windows, чтобы «установить» SrvStart.
Мы также предполагаем, что вы уже установили и настроили любую программу, которую собираетесь превратить в службу, но если вы этого не сделали, сейчас подходящий момент для этого.
Шаг 2. Создайте файл конфигурации для новой службы
Затем вам нужно создать файл конфигурации, который SrvStart будет читать для создания службы. Вы можете многое сделать с помощью SrvStart, и вы можете прочитать полную информацию обо всех параметрах конфигурации на
страница документации
. В этом примере мы будем использовать только две команды:
запускать
, который указывает программу для запуска, и
shutdown_method
, который сообщает SrvStart, как закрыть программу, когда соответствующая служба остановлена.
Запустите Блокнот и создайте файл конфигурации, используя формат, указанный ниже. Здесь мы используем Plex, но вы можете создать файл для любой программы, которую хотите запустить как службу. В
запускать
команда просто указывает путь, по которому находится исполняемый файл. Для
shutdown_method
команда, мы используем
сообщение
Параметр, который заставляет SrvStart отправлять сообщение о закрытии Windows в любые окна, открытые службой.
[Plex] startup = "C: \ Program Files (x86) \ Plex \ Plex Media Server \ Plex Media Server.exe" shutdown_method = winmessage
Очевидно, измените путь и имя в соответствии с программой, которую вы запускаете.
Сохраните новый файл конфигурации в любом месте и замените расширение .txt на .ini. Запомните имя файла, оно нам понадобится на следующем шаге. Для упрощения ввода в командной строке мы предлагаем временно сохранить этот файл прямо на диске C :.
Шаг третий: используйте командную строку для создания новой службы
Следующим шагом будет использование команды Windows Service Controller (SC) для создания новой службы на основе критериев в вашем файле конфигурации. Откройте командную строку, щелкнув правой кнопкой мыши меню «Пуск» (или нажав Windows + X), выбрав «Командная строка (администратор)», а затем щелкнув Да, чтобы разрешить запуск с правами администратора.
В командной строке используйте следующий синтаксис для создания новой службы:
SC CREATE <servicename> Displayname = "<servicename>" binpath = "srvstart.exe <servicename> -c <путь к файлу конфигурации srvstart>" start = <starttype>
В этой команде нужно отметить несколько моментов. Во-первых, после каждого знака равенства (=) стоит пробел. Это обязательно. Так же
<servicename>
ценность полностью зависит от вас. И, наконец, для
<тип запуска>
значение, вы хотите использовать
авто
так что служба запускается автоматически с Windows.
Итак, в нашем примере с Plex команда будет выглядеть так:
SC CREATE Plex Displayname = "Plex" binpath = "srvstart.exe Plex -c C: PlexService.ini" start = auto
Да, вы правильно прочитали: я использовал
C: PlexService.ini
вместо того
C: \ PlexService.ini
. Команда требует убрать косую черту.
Когда вы запустите команду, вы должны получить сообщение УСПЕХ, если все пойдет хорошо.
С этого момента ваша новая служба будет запускаться при каждом запуске Windows. Если вы откроете интерфейс служб Windows (просто нажмите «Пуск» и введите «Службы»), вы сможете найти и настроить новую службу так же, как любую другую.
Вот и все. Если у вас есть приложения, запускаемые с Windows, и вы предпочитаете, чтобы они запускались без необходимости входа пользователя в систему, достаточно легко превратить любое приложение в службу. Мы только что коснулись основного метода создания и запуска новой службы, но с помощью SrvStart вы можете сделать гораздо больше, чтобы точно настроить работу службы. Обязательно ознакомьтесь с документацией, если хотите узнать больше.