Я использую WinLIRC с ИК-приемником, подключенным к последовательный порт COM1 в Windows 7 x64. WinLIRC
добавлен в папку автозагрузки (Пуск-> Все приложения-> Автозагрузка), поэтому он запускается каждый раз, когда я вхожу в систему. Очень часто (но не всегда) я вижу сообщения об ошибках инициализации от WinLIRC
, которые продолжаются в течение некоторого времени (пару минут), если я повторю инициализацию, и после нескольких попыток он инициализируется правильно и работает нормально. Если я удалю его из запуска и запустил вручную в любом другом момент запускается без ошибок.
Я загрузил исходники WinLIRC
и добавил туда и сюда вызовы MessageBox
, чтобы я мог видеть, что происходит во время инициализации, и обнаружил, что вызов CreateFile
не выполняется:
if((hPort=CreateFile(
settings.port,GENERIC_READ | GENERIC_WRITE,
0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0))==INVALID_HANDLE_VALUE)
{
char buffer[256];
sprintf_s(buffer, "CreateFile(%s) failed with %d", settings.port, GetLastError());
MessageBox(NULL, buffer, "debug", MB_OK);
hPort=NULL;
return false;
}
Я вижу окно с сообщением «CreateFile (COM1) failed with 5», а 5 - это код ошибки «Доступ запрещен» согласно по этой ссылке .
Возникает вопрос, почему открытие COM-порта может завершиться сбоем с такой ошибкой сразу после загрузки Windows и обычно происходит через несколько секунд или минут?
Обновление : COM-порт настоящий.
Update2 : относительно другого приложения, открывающего последовательный порт до WinLIRC
. Я сделал следующее: я поместил Process Explorer в папку «Автозагрузка», чтобы он также запускался при входе в систему, а затем перезагрузился. Как только запустился проводник процесса, я запустил диалог «Найти дескриптор или Dll», ввел «Serial0» на вход и нажал «Поиск». К этому моменту WinLIRC уже показывал окно сообщения, в котором говорилось, что "CreateFile (COM1) failed with 5". Затем я дождался завершения поиска в проводнике процессов, увидел, что он ничего не нашел, затем попытался повторно инициализировать WinLIRC, и это снова не удалось. Поэтому я предполагаю, что это не тот случай, когда последовательный порт открывается другим приложением. Если кто-нибудь может предложить лучший способ проверить это, я с радостью перепроверяю.
Когда я ищу "Serial0" в проводнике процессов, когда WinLIRC работает, он находит процесс winlirc.exe
, поэтому похоже, что это правильный термин для поиска.
Update3 : относительно последовательного драйвера мыши.Его нет в диспетчере устройств, поэтому я не смог отключить его там, однако я нашел эту инструкцию по отключению службы sermouse
, и это не помогло.
Update4 : еще кое-что, что я забыл упомянуть. Это происходит только в том случае, если я вхожу в систему вскоре после загрузки ПК. Если я оставлю окна на экране входа в систему на несколько минут и вхожу позже, то WinLIRC всегда инициализируется без каких-либо проблем.
Update5 : К сожалению, у меня нет доступа к компьютеру, на котором возникла эта проблема с воспроизведением, поэтому я больше не могу экспериментировать.