Новая версия приложения-службы Windows не запускается - PullRequest
0 голосов
/ 12 августа 2011

У меня запущена служба Windows.Я создал новую версию приложения.Я пошел на сервер Windows и остановил службу.Затем я скопировал в новый .exe для службы и попытался запустить службу.Служба не запускается, время ожидания запускается, и я не могу понять, почему.Я уверен, что я сделал это раньше.Нужно ли удалять службу и переустанавливать ее?

Сервер: Windows Server 2003 R2 Приложение .NET Версия: 2.0 Разработано в: VS 2005 Язык VB.NET

Метод запуска:

Protected Overrides Sub OnStart(ByVal args() As String)
    ' Add code here to start your service. This method should set things
    ' in motion so your service can do its work.
    Me.Timer1.Enabled = True
End Sub

InitializeComponent: CHECKDB_INTERVAL_TIME = 10

Private Sub InitializeComponent()
    Dim iWaitTime As Int16
    iWaitTime = CType(ConfigurationManager.AppSettings("CHECKDB_INTERVAL_TIME"), Int16)
    Me.components = New System.ComponentModel.Container
    Me.Timer1 = New System.Timers.Timer()
    Me.Timer1.Interval = iWaitTime * 60000
    '
    'HarleyCloser
    '
    Me.ServiceName = "MyService"

End Sub

Friend WithEvents Timer1 As System.Timers.Timer

Я обнаружил проблему.Проблема была в директиве, которая использовалась для выполнения чего-то другого в режиме отладки по сравнению с режимом выпуска.

Ответы [ 5 ]

0 голосов
/ 15 августа 2011

Я нашел проблему. Был некоторый код, скрытый в службе с Директивой отладки. Если служба была скомпилирована в Debug, то она работала как консольное приложение, если она была скомпилирована в Release, то она работала как служба. Таким образом, служба отключила OnStart, поскольку пыталась запустить все консольное приложение.

0 голосов
/ 12 августа 2011

Вы должны использовать installutil для установки и удаления.ВСЕГДА, замена .EXE не очень хороший подход.

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

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.User;this.serviceProcessInstaller1.Password = ConfigurationSettings.AppSettings ["пароль"];this.serviceProcessInstaller1.Username = ConfigurationSettings.AppSettings ["username"];

0 голосов
/ 12 августа 2011

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

Что-то, что вы изменили между версиями, поставило задачу, которая занимает много времени в вашем OnStart. OnStart должен пройти от начала до конца менее чем за 30 секунд. Проверьте код OnStart на предмет блокирования.

Если вам нужно отладить OnStart , вот несколько советов о том, что делать, однако 30-секундное ограничение все еще применяется. Другой совет - добавьте в OnStart несколько сообщений, которые будут добавлять сообщения в журнал Windows, показывающие, как далеко продвинулся ваш код.

0 голосов
/ 12 августа 2011

Вы должны использовать «installutil», чтобы удалить старую службу, а затем снова установить новую. Вы можете использовать «installutil» через командную строку Visual Studio.

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

0 голосов
/ 12 августа 2011

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

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