У меня есть приложение, которое запускается и непрерывно находится в значке в системном трее. Он гарантирует, что это единственный исполняемый экземпляр моего приложения, запустив некоторый код, который использует мьютекс @Global.Могу ли я выполнить код в существующем процессе?
Из-за ограничений сторонних поставщиков единственный (разумный) способ, который я могу интегрировать с одной частью приложения-поставщика, - указать в файле конфигурации, который вызывается произвольным исполняемым файлом командной строки. Параметры, которые меня волнуют, автоматически добавляются в исполняемый файл, который я указываю.
Таким образом, я думаю, что большинство людей, которые интегрировали это, запускают отдельную программу, которая подключается к серверному сокету в основной программе и отправляет пакет, позволяя основной программе знать, что запущена командная строка.
Я интересно, если есть способ, которым я мог бы сделать это псевдо-код ..
static void Main(string[] args)
{
if (isrunningcommandLine)
{
ConnectToAlreadyRunningProcessAndPassInfo(args); // find already running process by its process name and somehow pass the command line params
KillProgram();
}
else
{
CheckGlobalMutexAndStart();
}
}
По существу, если я бег через командную строку подключение к уже запущенному глобальному процессу и передать ему некоторые данные.
Я управляю кодом, который будет как клиентом, так и сервером, они на самом деле являются одним и тем же проектом.
Инъекционное поведение в другой процесс/окна в основном запрещены, но не невозможно, так как мы делаем это все время, используя пространство имен UITesting найти здесь: https://msdn.microsoft.com/en-us/library/microsoft .visualstudio.testtools.uitesting.aspx Есть и другие способы, но, поскольку вы упомянули все, что я знаю, требуют, чтобы процесс работал, чтобы каким-то образом узнать о чем-то, что изменяет его поведение. В частности, существует набор классов в C++, известный как класс IPC (Inter-Process-Communications), который делает именно то, что вы хотите. Проблема заключается как в клиентском, так и в другом pgm. должен быть готов для сообщений. –
Вы написали приложение для значка в трее, которое должно связываться с другим вашим приложением через командную строку? Что такое серверный сокет? В чем именно проблема? –
Да, это возможно. Все, что вам нужно, это хорошо известная конечная точка для вашего исполняемого экземпляра, к которому может подключиться вызов из командной строки. Существует несколько подходов к этому; вы можете, например, открыть WCF с именем конечной точки с фиксированным именем и передать это имя конечной точки в качестве аргумента в консольное приложение. –