Описание
Я разрабатываю приложение-агент, которое обращается к общей памяти нескольких приложений. Установка включает в себя три приложения:
A: приложение WPF C#.
B: приложение Python — агент.
C (BLauncher): A C # Служба Windows, которая обновляет и перезапускает B, если она не запущена.
A: C#
public void UpdateInfo(String fieldName, T info) where T : struct
{
try
{
DataTag dataTag = new DataTag();
_accessor.Read(0, out dataTag);
FieldInfo fieldInfo = typeof(DataTag).GetField(fieldName, BindingFlags.Public | BindingFlags.Instance);
if (fieldInfo == null)
{
throw new ArgumentException($"Field '{fieldName}' does not exist in DataTag.");
}
if (fieldInfo.FieldType == typeof(T))
{
fieldInfo.SetValueDirect(__makeref(dataTag), info);
}
else
{
throw new ArgumentException($"Field '{fieldName}' is of type {fieldInfo.FieldType}, not {typeof(T)}.");
}
_accessor.Write(0, ref dataTag);
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
def connect(self):
if self.shm is None:
try:
self.shm = shared_memory.SharedMemory(name=self.memory_segment_name, create=False)
logger.info(f"Successfully connected to shared memory segment: {self.memory_segment_name}")
except FileNotFoundError:
logger.error(f"Error: Shared memory segment '{self.memory_segment_name}' not found.")
self.shm = None
except Exception as e:
logger.error(f"An unexpected error occurred: {e}")
self.shm = None
Среда
ПК1: Мой ноутбук под управлением Windows 11 с одной учетной записью пользователя. Доступ к общей памяти здесь работает правильно.
ПК2: компьютер под управлением Windows 10 с двумя учетными записями пользователей: Hello и eHello. На этом компьютере возникают проблемы с общей памятью.
Проблема
На ПК1 (одна учетная запись пользователя) приложение A пишет ~2000 байт данных в сегмент общей памяти с именем «MACHINE_INFO». Приложение Б успешно считывает данные при запуске как скрипт Python или как отдельный .exe-файл.
Однако на ПК2 (с двумя учетными записями пользователей) происходит следующее:
Приложение C (служба Windows, работающая под учетной записью System) запускает B как .exe-файл.
B сообщает, что сегмент общей памяти «MACHINE_INFO» не существует.
Ключевая информация
Я подозреваю, что это может быть связано с тем, как общая память работает между сеансами в Windows. Предыдущее обсуждение показало, что общая память зависит от сеанса, но я не уверен, что это полностью объясняет проблему.
C запускается как служба Windows под системной учетной записью.
Может ли приложение WPF (A) записывать в сегмент общей памяти, к которому имеет доступ системная учетная запись (и, следовательно, C)?
Вопросы
Да Windows обрабатывает общую память в зависимости от сеанса, что может привести к тому, что сегмент «MACHINE_INFO» будет недоступен во всех сеансах?
Как настроить или реализовать общую память, чтобы она была доступна для всех сеансов, особенно для приложений, работающих под системной учетной записью?
Будем очень признательны за любые рекомендации и предложения!
Описание Я разрабатываю приложение-агент, которое обращается к общей памяти нескольких приложений. Установка включает в себя три приложения: A: приложение WPF C#.
B: приложение Python — агент. C (BLauncher): A C # Служба Windows, которая обновляет и перезапускает B, если она не запущена. A: C# [code]public void UpdateInfo(String fieldName, T info) where T : struct { try {
DataTag dataTag = new DataTag(); _accessor.Read(0, out dataTag);
FieldInfo fieldInfo = typeof(DataTag).GetField(fieldName, BindingFlags.Public | BindingFlags.Instance); if (fieldInfo == null) { throw new ArgumentException($"Field '{fieldName}' does not exist in DataTag."); }
if (fieldInfo.FieldType == typeof(T)) { fieldInfo.SetValueDirect(__makeref(dataTag), info); } else { throw new ArgumentException($"Field '{fieldName}' is of type {fieldInfo.FieldType}, not {typeof(T)}."); }
} [/code] Б: Python [code] def connect(self): if self.shm is None: try: self.shm = shared_memory.SharedMemory(name=self.memory_segment_name, create=False) logger.info(f"Successfully connected to shared memory segment: {self.memory_segment_name}") except FileNotFoundError: logger.error(f"Error: Shared memory segment '{self.memory_segment_name}' not found.")
self.shm = None except Exception as e: logger.error(f"An unexpected error occurred: {e}") self.shm = None [/code] Среда [list] [*]ПК1: Мой ноутбук под управлением Windows 11 с одной учетной записью пользователя. Доступ к общей памяти здесь работает правильно. [*]ПК2: компьютер под управлением Windows 10 с двумя учетными записями пользователей: Hello и eHello. На этом компьютере возникают проблемы с общей памятью. [/list] Проблема На ПК1 (одна учетная запись пользователя) приложение A пишет ~2000 байт данных в сегмент общей памяти с именем «MACHINE_INFO». Приложение Б успешно считывает данные при запуске как скрипт Python или как отдельный .exe-файл. Однако на ПК2 (с двумя учетными записями пользователей) происходит следующее:[list] [*]Приложение C (служба Windows, работающая под учетной записью System) запускает B как .exe-файл. [*]B сообщает, что сегмент общей памяти «MACHINE_INFO» не существует. [/list] Ключевая информация [list] [*]Я подозреваю, что это может быть связано с тем, как общая память работает между сеансами в Windows. Предыдущее обсуждение показало, что общая память зависит от сеанса, но я не уверен, что это полностью объясняет проблему. [*]C запускается как служба Windows под системной учетной записью.[*]Может ли приложение WPF (A) записывать в сегмент общей памяти, к которому имеет доступ системная учетная запись (и, следовательно, C)? [/list] Вопросы [list] [*]Да Windows обрабатывает общую память в зависимости от сеанса, что может привести к тому, что сегмент «MACHINE_INFO» будет недоступен во всех сеансах? [*]Как настроить или реализовать общую память, чтобы она была доступна для всех сеансов, особенно для приложений, работающих под системной учетной записью? [/list] Будем очень признательны за любые рекомендации и предложения!
Описание
Я разрабатываю приложение-агент, которое обращается к общей памяти нескольких приложений. Установка включает в себя три приложения:
A: приложение WPF C#.
B: приложение Python — агент.
C (BLauncher): A C # Служба Windows, которая обновляет...
Я относительно новичок в Боке, но очень знаком с Python.
Я хочу использовать сервер Bokeh для создания графического просмотра в прямом эфире для моих данных. Я хочу получить данные в одном потоке, а затем передать их всем открытым документам...
Я относительно новичок в Боке, но очень знаком с Python.
Я хочу использовать сервер Bokeh для создания графического просмотра в прямом эфире для моих данных. Я хочу получить данные в одном потоке, а затем передать их всем открытым документам...
Я работаю над тестовой средой для проекта, состоящего из нескольких API. Для каждого из них у меня есть отдельный клиент, которому необходимо авторизоваться с помощью разных токенов. Тесты выполняются параллельно.
Мое решение заключалось в создании...