Не удается открыть LPT1 (порт принтера) на win7 (64 бита).То же приложение работает на Win XP - PullRequest
2 голосов
/ 23 октября 2010

У меня есть приложение, которое открывает порт для принтера (это принтер штрих-кода), которое работает на win XP, но когда я переключаюсь на win7 (64bit), у меня возникает проблема.Вот код:

Я использую этот метод, чтобы открыть порт:

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern SafeFileHandle CreateFile(
           String pipeName,
           uint dwDesiredAccess,
           uint dwShareMode,
           IntPtr lpSecurityAttributes,
           uint dwCreationDisposition,
           uint dwFlagsAndAttributes,
           IntPtr hTemplate);

, и я называю это так:

public void OpenPort(String portName)
{
    if (String.IsNullOrEmpty(m_portName)) throw new Exception(SET_PORTNAME);
    this.m_portName = portName;
    pipeHandle = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero,
        OPEN_EXISTING, FILE_FLAG_OVERLAPPED, IntPtr.Zero);
}

Что происходит, чтоpipeHandle.Close = false и pipeHandle.IsInvalid = true

Это метод, который передает данные в порт

        private void WriteBytesToPrinter(byte[] dataBytes)
        {
            if (!IsPortOpen) throw new Exception(OPEN_PORT_ERROR);
            using (FileStream fStream = new FileStream(pipeHandle, FileAccess.Write,  
                 dataBytes.Length, true))
            {
                fStream.Write(dataBytes, 0, dataBytes.Length);
                fStream.Flush();
                fStream.Close();
            }
        }

, и я получаю исключение:

ArgumentException
Invalid handle.
Parameter name: handle

Я был бы очень признателен за помощь.Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 октября 2010

Что portName вы указали?Вы пробовали:

pipeHandle = CreateFile("NONSPOOLED_LPT1", GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, IntPtr.Zero);

?

0 голосов
/ 23 октября 2010

Вы пытались запустить исполняемый файл в режиме совместимости WinXP?Могут возникнуть проблемы с новой моделью драйвера Windows в Windows 7.

...