Я использую 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) завершился ошибкой с 5», а 5 - это код ошибки «Доступ запрещен» согласно этой ссылке .
Таким образом, вопрос в том, почему открытие COM-порта может завершиться с такой ошибкой сразу после загрузки Windows и обычно происходит через несколько секунд или минут?
Обновление : COM-порт настоящий.
Update2 : относительно другого приложения, открывающего последовательный порт до WinLIRC
. Я сделал следующее: я поместил Process Explorer в папку «Автозагрузка», чтобы он также запускался при входе в систему, а затем перезагружался. Как только запустился проводник процессов, я запустил диалог «Find Handle or Dll», добавил «Serial0» к входу и нажал «Search». К этому моменту WinLIRC уже показывал окно с сообщением «CreateFile (COM1) завершился неудачно с 5». Затем я дождался окончания поиска в проводнике процессов, увидел, что он ничего не нашел, затем попытался повторно инициализировать WinLIRC, и снова произошел сбой. Поэтому я предполагаю, что это не тот случай, когда последовательный порт открывается другим приложением. Если кто-нибудь может предложить лучший способ проверить это, я с радостью перепроверю.
Когда я выполняю поиск «Serial0» в проводнике процессов во время работы WinLIRC, он находит процесс winlirc.exe
, поэтому он выглядит как правильный термин для поиска.
Update3 : относительно драйвера последовательной мыши. В диспетчере устройств его нет в списке, поэтому я не смог его там отключить, однако нашел эту инструкцию по отключению службы sermouse
, и это не помогло.
Update4 : еще одна вещь, которую я забыл упомянуть. Это происходит, только если я вхожу в систему вскоре после загрузки ПК. Если я оставлю окна на экране входа в систему на несколько минут и войду позже, WinLIRC всегда инициализируется без проблем.
Update5 : К сожалению, у меня нет доступа к компьютеру, на котором воспроизводилась эта проблема, поэтому я больше не могу экспериментировать.