пользовательской службе не удалось запуститься при незапланированной перезагрузке сервера?
Вопрос
Я создал сервис, и то, что он делает, - это записывает информацию в 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)
Решение
Если проблема вызвана слишком ранним запуском службы после перезагрузки, почему бы не проверить время последней перезагрузки и не пропустить выполнение задачи до истечения определенного количества минут после перезагрузки.Система.Среда.TickCount покажет вам количество миллисекунд с момента последней загрузки.
http://msdn.microsoft.com/en-us/library/system.environment.tickcount.aspx
Другие советы
Возможно ли, что ваш сервис может обращаться к этому дважды, пытаясь каждый раз получить эксклюзивную блокировку для него?