Передача данных в .NET C # WPF приложения / DLL - PullRequest
1 голос
/ 21 ноября 2008

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

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

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

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

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

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

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

  • Именованные каналы
  • .NET Remoting
  • Сообщения Windows (отправка WM_COPYDATA в окно первого экземпляра)

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

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 21 ноября 2008

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

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

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

0 голосов
/ 22 ноября 2008

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

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

0 голосов
/ 21 ноября 2008

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

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

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

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

...