Закрыть обработчик соединения последовательного порта из другого процесса - PullRequest
0 голосов
/ 27 марта 2020

Я столкнулся со странным сценарием при обновлении программного обеспечения нашего продукта. Требуется закрыть последовательный порт, открытый основным процессом, из другого процесса.

Выполнение выше упростит процесс обновления нашего программного обеспечения. Решение позволяет избежать многих обходных путей в различных областях, таких как процесс установки программного обеспечения клиента, установка продукта, сборка программного обеспечения и т. Д. Et c

Наивно: основной процесс открыл связь через последовательный порт со сканером и работает У нас есть другой процесс, скажем, Process2, который помогает при обновлении программного обеспечения. Во время процедуры обновления программного обеспечения «Process2» необходимо открыть соединение через последовательный порт со сканером, поскольку порт уже занят Основным процессом, мы получаем следующую ошибку из Process2: «Доступ к пути« COM1 »запрещен».

Пробовал следующие решения: 1) Унаследовать класс SerialPort, скрыть реализацию Open (), попробуйте немедленно избавиться от того же порта. Скопировал идею из следующего потока stackoverflow

thread stackflowflow

2) Попробовал отражение на объекте SerialPort в новом экземпляре перед открытием соединения и попытался получить дескриптор последовательный порт и избавиться, не работает. Я получаю исключение нулевой ссылки в строке 2

var serialPort = new System.IO.Ports.SerialPort("COM1");
object stream = typeof(SerialPort).GetField("internalSerialStream", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(serialPort);
var handle = (SafeFileHandle)stream.GetType().GetField("_handle", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(stream);

Я не решался начать, это возможно? Если да, помогите получить техническое решение

...