У меня есть приложение .NET C# WPF, которое я пытаюсь превратить в одноэкземплярное приложение с помощью Mutex.
Это приложение .NET вызывается библиотекой DLL на основе C++ с помощью CreateProcessAsUser () и получает параметры через переменные среды.
Последующие экземпляры также будут созданы библиотекой C++ DLL таким же образом.
Последующие экземпляры должны будут затем передать свои параметры первому экземпляру приложения перед выходом.
Проблема в том, какие методы можно использовать в приложении .NET, чтобы последующие экземпляры могли передавать свои данные первому экземпляру приложения .NET? Чем проще, тем лучше.
Я исследовал некоторые, но надеюсь, что есть более простые способы.
Вещи, которые я исследовал:
Поскольку я просто пытаюсь передать 4 строки первому экземпляру, я стараюсь избегать вышеупомянутых методов, потому что они несколько излишни для моей проблемы.
Самое простое, что я могу придумать, - это экспортировать функцию из приложения .NET, чтобы последующие экземпляры приложения .NET могли просто вызывать эту функцию в первом экземпляре приложения .NET и передавать данные в качестве параметров функции. . Однако возможно ли это в .NET? Я читал, что .NET EXE или DLL не могут экспортировать функции.
Спасибо!





Самое простое, что я могу придумать, - это экспортировать функцию из приложения .NET, а затем последующие экземпляры могут просто вызвать эту функцию и передать ей параметры.
Это не так. Вы загружаете сборку .NET в вызывающий процесс, а не волшебным образом пересекаете границу процесса и разговариваете с дочерним процессом.
Просто попросите родительский элемент открыть дочерний элемент с перенаправленными каналами, используя класс Process, и пусть дочерний элемент будет читать из stdin с помощью Console.Read *
спасибо за ответ, Пол!
Я добавил более подробную информацию к своему вопросу выше, потому что я не уверен, правильно ли был понят мой сценарий.
Но что касается вашего ответа, то родителем приложения .NET будет библиотека DLL на основе C++, и все, что она сделает, это вызовет приложение .NET и предоставит ему параметры. DLL, основанная на C++, также выйдет после этого, поэтому я не хотел бы добавлять к ней какое-либо поведение.
Таким образом, передача данных будет осуществляться только между экземплярами приложений .NET.
Поскольку вы переходите с .NET на .NET, я бы рекомендовал просто выполнить вызов WCF. Вы можете использовать транспорт по именованным каналам между двумя экземплярами .NET, чтобы предоставить «службу» (это то, что предоставит ваш первый экземпляр).
Последующие экземпляры будут выполнять проверку одного экземпляра, и, если они обнаруживают уже запущенный экземпляр, они могут вызвать WCF-вызов службы, запущенной в первом экземпляре, и передать данные таким образом.