Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > windows service


Автор: 4ybaka 5.7.2008, 19:29
написал простой сервис для теста:
Код

        protected override void OnStart(string[] args) {
            StreamWriter writer = new StreamWriter("C:\\file.txt");
            writer.WriteLine("ggg");
            writer.Close();
        }

остальное оставил без изменений.однако после запуска службы файл не создается.сервис вроде нормально стартует(и сразу остнаваливается,т.к. делать ему нечегоsmile).вопрос - почему нет файла?

Автор: jonie 5.7.2008, 20:12
вот прямо сгенерированный (без добавки инсталлера) хрен установится в систему....
ну да будем считать что все добавил 8)

Цитата

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

                Debugger.Launch(); //!!!
                Debugger.Break();
                StreamWriter writer = new StreamWriter("C:\\file.txt");
                writer.WriteLine("ggg");
                writer.Close();

запустим дебаггер и обнаружим, что сервис-то падает на AccessDenied
с какой учетки запускаете сервис-то?

Автор: 4ybaka 5.7.2008, 20:58
сервис ставится как LocalService.устанавливаю под админом.

Автор: jonie 5.7.2008, 21:07
вы лучше код запустите что я привел.
LocalService по умолчанию доступа к FS не имеет.
короче права дай юзеру LocalService (RW) на каталог куда пишешь или запускай под другой учеткой, имеющей права.

Автор: Idsa 5.7.2008, 21:22
Немного офтоп.
Есть ли какие-то тонкости с установкой сервиса через installutil. Пробовал и в XP, и в Vista, эффект один и тот же: пишет, что все ок, но в списке сервисов сервис не появляется.

Автор: jonie 5.7.2008, 22:16
а точно пишет-то? ты добавлял инсталлятора класс ? логи в студию кароче)

Автор: Bogdan1024 5.7.2008, 22:59
Попробуй добавить в инсталятор службы требование на разрешение доступа к твоему файлу и посмотри что скажет инсталятор когда ты попытаешься поставить свою службу. И в коде тоже требование добавь (в сборку и в метод).
Вообще это с правами трабл, мне кажется.

Добавлено через 39 секунд
Ещё попробуй настроить в панель управления->администрирование->.NET FW Configuration доступ к файлу...

Автор: jonie 5.7.2008, 23:38
Bogdan1024 почитай что я писал выше и не надо гипотез. инсталятору вообще пофиг на разрешения. даете права на запись и все ок будет.

Автор: Idsa 6.7.2008, 09:58
Цитата(jonie @  6.7.2008,  02:16 Найти цитируемый пост)
а точно пишет-то? ты добавлял инсталлятора класс ? логи в студию кароче) 

Я решил ручками через installutil добавить. Вот что пишет:
Цитата

Выполняется групповая операция установки.

Начинается этап установки процедуры установки.
См. файл журнала выполнения операция для сборки D:\TestWebApplication\WindowsSer
vice1\WindowsService1\bin\Debug\WindowsService1.exe.
Данный файл находится в D:\TestWebApplication\WindowsService1\WindowsService1\bi
n\Debug\WindowsService1.InstallLog.
Выполняется установка сборки 'D:\TestWebApplication\WindowsService1\WindowsServi
ce1\bin\Debug\WindowsService1.exe'.
Затронуты следующие параметры:
   logtoconsole =
   assemblypath = D:\TestWebApplication\WindowsService1\WindowsService1\bin\Debu
g\WindowsService1.exe
   logfile = D:\TestWebApplication\WindowsService1\WindowsService1\bin\Debug\Win
dowsService1.InstallLog
Отсутствуют общие программы установки с атрибутом RunInstallerAttribute.Yes в сб
орке D:\TestWebApplication\WindowsService1\WindowsService1\bin\Debug\WindowsServ
ice1.exe.

Этап установки успешно выполнен, начинается этап фиксации.
См. файл журнала выполнения операция для сборки D:\TestWebApplication\WindowsSer
vice1\WindowsService1\bin\Debug\WindowsService1.exe.
Данный файл находится в D:\TestWebApplication\WindowsService1\WindowsService1\bi
n\Debug\WindowsService1.InstallLog.
Выполняется фиксация сборки 'D:\TestWebApplication\WindowsService1\WindowsServic
e1\bin\Debug\WindowsService1.exe'.
Затронуты следующие параметры:
   logtoconsole =
   assemblypath = D:\TestWebApplication\WindowsService1\WindowsService1\bin\Debu
g\WindowsService1.exe
   logfile = D:\TestWebApplication\WindowsService1\WindowsService1\bin\Debug\Win
dowsService1.InstallLog
Отсутствуют общие программы установки с атрибутом RunInstallerAttribute.Yes в сб
орке D:\TestWebApplication\WindowsService1\WindowsService1\bin\Debug\WindowsServ
ice1.exe.
Удалите файл InstallState, поскольку отсутствуют программы установки.

Этап фиксации выполнен успешно.

Групповая операция установки выполнена.

Автор: 4ybaka 6.7.2008, 11:13
jonie, ты прав,нет правsmile 
тогда еще вопрос(пока модераторы спятsmile).хочу вести логи.и проверяю,есть ли уже:
Код

            if(!System.Diagnostics.EventLog.Exists("SCServiceLogSource"))
                System.Diagnostics.EventLog.CreateEventSource("SCServiceLogSource", "SCServiceLog");

так вот когда доходит дело до второй строки - выкидывает эксепшн,мол такой(SCServiceLogSource) уже есть  smile ...

Автор: jonie 6.7.2008, 12:17
Цитата

Отсутствуют общие программы установки с атрибутом RunInstallerAttribute.Yes

Idsa ну он и пишет даже по-русски, что у тебя нету инсталятора класса.
в двух словах тыкаешь дважды на Service1.cs (от откроет редактор). тыкаешь правой на основном окне (НЕ окне просмотра решения), там есть Add Installer в меню. Мастер создает еще один класс инсталятора, и связывает его с твоим сервисом.

4ybaka не юзаю стандартную писалку в логи. так что хз. попробуй для начала делать тоже не из сервиса)

Автор: Idsa 6.7.2008, 12:33
jonie, получилось. Спасибо smile Первый раз с Windows Service работал. +1.

Автор: CL0NE 1.12.2009, 00:15
 Поставил сервис, все работает и использует свой журнал событий, как и выше приведенном коде:
Код

if(!System.Diagnostics.EventLog.Exists("SCServiceLogSource"))
                System.Diagnostics.EventLog.CreateEventSource("SCServiceLogSource", "SCServiceLog");


Но пришлось переделывать код и в результате нужно было удалять службу, результат:
Цитата

C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\TestService>InstallUtil.exe /u TestService.exe
Microsoft ® .NET Framework Installation utility Version 2.0.50727.3053
Copyright © Microsoft Corporation.  All rights reserved.



Начинается установка.
См. файл журнала выполнения операция для сборки C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\TestService\TestService.exe.
Данный файл находится в C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\TestService\TestService.InstallLog.
Выполняется удаление сборки 'C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\TestService\TestService.exe'.
Затронуты следующие параметры:
   logtoconsole =
   assemblypath = C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\TestService\TestService.exe
   logfile = C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\TestService\TestService.InstallLog
Выполняется удаление источника EventLog Test Service [Server].
При выполнении программы установки System.Diagnostics.EventLogInstaller во время
 установки возникло исключение.
System.InvalidOperationException: Источник 'Test Service [Server]' журнала собы
тий не может быть удален, поскольку совпадает с именем самого журнала.
При удалении из системы возникло исключение. Это исключение будет проигнорирован
о, и удаление из системы будет продолжено. Однако после завершения удаления данн
ое приложение может оказаться не полностью удаленным.

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

Погуглил, прочитал совет, что нужно удалять в реестре ключи/ветку, которая отвечает за сервис. Нет такой ветки в HKLM/SYSTEM/CurrentControlSet/<Service name>, а ветка, которая принадлежит службе журнала событий после удаления и повтора процедуры InstallUtil.exe /u ... снова появляется. Как исправить данную ошибку?

После перезагрузки и попытки заинсталить службу:
Цитата

C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Pr
ojects\Test>InstallUtil.exe Test.exe
Microsoft ® .NET Framework Installation utility Version 2.0.50727.3053
Copyright © Microsoft Corporation.  All rights reserved.


Выполняется групповая операция установки.

Начинается этап установки процедуры установки.
См. файл журнала выполнения операция для сборки C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\Test\Test
.exe.
Данный файл находится в C:\Documents and Settings\User\Мои докумен
ты\Visual Studio 2008\Projects\Test\Test.InstallLog.
Выполняется установка сборки 'C:\Documents and Settings\User\Мои д
окументы\Visual Studio 2008\Projects\Test\Test.exe'.
Затронуты следующие параметры:
   logtoconsole =
   assemblypath = C:\Documents and Settings\User\Мои документы\Vis
ual Studio 2008\Projects\Test\Test.exe
   logfile = C:\Documents and Settings\User\Мои документы\Visual S
tudio 2008\Projects\Test\Test.InstallLog
Устанавливается служба Test Service [Server]...
Служба Test Service [Server] успешно установлена.
Создается исходный EventLog Test Service [Server] в журнале Application...

На этапе установки возникло исключение.
System.ArgumentException: Источник Test Service [Server] уже существует на лока
льном компьютере.

Начинается этап отката процедуры установки.
См. файл журнала выполнения операция для сборки C:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\Test\Test
.exe.
Данный файл находится в C:\Documents and Settings\User\Мои докумен
ты\Visual Studio 2008\Projects\Test\Test.InstallLog.
Выполняется откат для сборки 'C:\Documents and Settings\User\Мои д
окументы\Visual Studio 2008\Projects\Test\Test.exe'.
Затронуты следующие параметры:
   logtoconsole =
   assemblypath = C:\Documents and Settings\User\Мои документы\Vis
ual Studio 2008\Projects\Test\Test.exe
   logfile = C:\Documents and Settings\User\Мои документы\Visual S
tudio 2008\Projects\Test\Test.InstallLog
Восстанавливается исходное состояние журнала событий для источника Test Service
 [Server].
Выполняется удаление службы Test Service [Server] из системы...
Служба Test Service [Server] успешно удалена из системы.

Этап отката выполнен успешно.

Групповая операция установки выполнена.
Произошел сбой установки и был выполнен откат.


UPD:
"А ларчик просто открывался":  добавил ветку с именем Test Service [Server] в ../EventLog/Application и все заработало.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)