Не удается открыть COM1 из приложения, запущенного при запуске

Я использую 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 : К сожалению, у меня нет доступа к компьютеру, на котором возникла эта проблема с воспроизведением, поэтому я больше не могу экспериментировать.

8
задан n0rd 24 June 2013 в 21:33
поделиться