Передача данных в приложения / библиотеки .NET C# WPF

У меня есть приложение .NET C# WPF, которое я пытаюсь превратить в одноэкземплярное приложение с помощью Mutex.

Это приложение .NET вызывается библиотекой DLL на основе C++ с помощью CreateProcessAsUser () и получает параметры через переменные среды.

Последующие экземпляры также будут созданы библиотекой C++ DLL таким же образом.

Последующие экземпляры должны будут затем передать свои параметры первому экземпляру приложения перед выходом.

Проблема в том, какие методы можно использовать в приложении .NET, чтобы последующие экземпляры могли передавать свои данные первому экземпляру приложения .NET? Чем проще, тем лучше.

Я исследовал некоторые, но надеюсь, что есть более простые способы.

Вещи, которые я исследовал:

  • Именованные каналы
  • Удаленное взаимодействие .NET
  • Обмен сообщениями Windows (отправка WM_COPYDATA в окно первого экземпляра)

Поскольку я просто пытаюсь передать 4 строки первому экземпляру, я стараюсь избегать вышеупомянутых методов, потому что они несколько излишни для моей проблемы.

Самое простое, что я могу придумать, - это экспортировать функцию из приложения .NET, чтобы последующие экземпляры приложения .NET могли просто вызывать эту функцию в первом экземпляре приложения .NET и передавать данные в качестве параметров функции. . Однако возможно ли это в .NET? Я читал, что .NET EXE или DLL не могут экспортировать функции.

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 755
3

Ответы 3

Самое простое, что я могу придумать, - это экспортировать функцию из приложения .NET, а затем последующие экземпляры могут просто вызвать эту функцию и передать ей параметры.

Это не так. Вы загружаете сборку .NET в вызывающий процесс, а не волшебным образом пересекаете границу процесса и разговариваете с дочерним процессом.

Просто попросите родительский элемент открыть дочерний элемент с перенаправленными каналами, используя класс Process, и пусть дочерний элемент будет читать из stdin с помощью Console.Read *

спасибо за ответ, Пол!

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

Но что касается вашего ответа, то родителем приложения .NET будет библиотека DLL на основе C++, и все, что она сделает, это вызовет приложение .NET и предоставит ему параметры. DLL, основанная на C++, также выйдет после этого, поэтому я не хотел бы добавлять к ней какое-либо поведение.

Таким образом, передача данных будет осуществляться только между экземплярами приложений .NET.

Поскольку вы переходите с .NET на .NET, я бы рекомендовал просто выполнить вызов WCF. Вы можете использовать транспорт по именованным каналам между двумя экземплярами .NET, чтобы предоставить «службу» (это то, что предоставит ваш первый экземпляр).

Последующие экземпляры будут выполнять проверку одного экземпляра, и, если они обнаруживают уже запущенный экземпляр, они могут вызвать WCF-вызов службы, запущенной в первом экземпляре, и передать данные таким образом.

Другие вопросы по теме