не удалось запустить пользовательскую службу при незапланированной перезагрузке сервера?

Я создал службу, и она записывает информацию в файл xml.

Иногда, кажется, это происходит в основном с незапланированной перезагрузкой, служба не может запуститься, потому что используемый файл «заблокирован». Эта ошибка возникает, когда система все еще запускается, поскольку моя служба настроена на «автоматический запуск».

Это под windows 2003.

Кто-нибудь знает, почему это происходит?

Благодарю.

The process cannot access the file 'D:\myService\eventlog.xml' because it is being used by another process.

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.Xml.XmlTextWriter..ctor(String filename, Encoding encoding)
at System.Data.DataTable.WriteXml(String fileName, XmlWriteMode mode, Boolean writeHierarchy)
at System.Data.DataTable.WriteXml(String fileName)
at myService.c_control.addXmlLog(eventStatus timeStatus) 

person Fredou    schedule 21.01.2009    source источник


Ответы (2)


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

http://msdn.microsoft.com/en-us/library/system.environment.tickcount.aspx

person Tundey    schedule 26.01.2009

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

person casperOne    schedule 21.01.2009
comment
нет, потому что это происходит не постоянно. Я думаю, это потому, что служба запускается слишком рано в процессе загрузки. - person Fredou; 21.01.2009