2012-04-17 2 views
0

Я создал службу Windows с помощью (Visual Studio 8) и установил ее с помощью инструмента installutil.exe, однако я не получаю от него правильный результат, поскольку я сделал следующий код при запуске службы метод.Ошибка при запуске метода windows

protected override void OnStart(string[] args) 
{ 
    FileStream fs = new FileStream(@"e:\mcWindowsService.txt", 
     FileMode.OpenOrCreate, FileAccess.Write); 
    StreamWriter m_streamWriter = new StreamWriter(fs); 
    m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); 
    m_streamWriter.WriteLine("m ready buddy"); 
    m_streamWriter.Flush(); 
    m_streamWriter.Close(); 
} 

Вместо того, чтобы создавать файл на диске E, отображается следующая ошибка, когда я смотрю на нее!

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

+2

Имеет ли учетная запись, выполняющая службу, чтение/запись в E? Существует ли E для пользователя? (IE - это отображаемый том для общего сетевого ресурса?) – vcsjones

+0

Учетная запись с правами администратора, и я выполняю ее на локальной системе. – San

+0

Несмотря на то, что вы работаете с правами администратора, ваша служба может по-прежнему не иметь доступа к сетевым дискам. Является ли E сетевым диском? – CoreTech

ответ

2

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

+0

ОК, я запустил его под отдельной нитью. Может быть, проблема будет решена. – San

+0

Тема Помогла мне поблагодарить приятеля. – San

0

Если вы запустите службу с консоли, убедитесь, что ваша учетная запись имеет разрешения на E-драйвер.

Если вы установили службу, и понял, что он бросил исключение, затем установите тип учетной записи для инсталлятора службы как

var serviceInstaller = new ServiceProcessInstaller(); 
      serviceInstaller.Account = ServiceAccount.LocalSystem; 
0

Я почти уверен, что ваш код аварии. Предложенное выше предложение try-catch является лучшим до сих пор, поэтому вы можете видеть, какие взрывы.

Далее: Попытайтесь не выполнять работу, которая занимает много времени в компоненте OnStart - только легкая инициализация. Есть тайм-аут, и если вы пройдете мимо этого соглашения, Windows будет жаловаться на то, что он не сможет запустить его - он останется в состоянии запуска, которое раздражает. В OnStart запустите только таймер и выполните ваш тяжелый материал в обработчике события истечения этого интервала таймера таймер _Elapsed. Перед тем, как выполнить ваши действия, приостановите таймер и запустите его после завершения операции.

Смежные вопросы