Mohideenmeera Ответов: 1

Как получить возвращаемое значение из exe или DLL в другое приложение


У меня есть форма WPF, которая имеет кнопку и текстовое поле, когда я нажимаю кнопку, она должна открыть WinForm exe, который имеет поле списка, элементы, выбранные в поле списка, должны быть возвращены в текстовое поле формы WPF,

Что я уже пробовал:

КОД КНОПКИ WPF
System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();
            //System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.UseShellExecute = false;
            p.RedirectStandardOutput = true;
            p.FileName= System.IO.Path.GetDirectoryName(GeneralActivities.ExecutionPath) + "\\MYTESTAPP.exe";

            try
            {
                using (System.Diagnostics.Process startprocess = System.Diagnostics.Process.Start(p))
                {
                    startprocess.WaitForExit();
                    string output = startprocess.StandardOutput.ReadToEnd();
                    
                    MessageBox.Show(output);
                }
            }

1 Ответов

Рейтинг:
4

RickZeeland

Что-то вроде этого:

using (System.Diagnostics.Process p = new System.Diagnostics.Process())
{
	p.StartInfo = new System.Diagnostics.ProcessStartInfo(System.IO.Path.GetDirectoryName(GeneralActivities.ExecutionPath) + "\\MYTESTAPP.exe");
	p.StartInfo.CreateNoWindow = true;
	p.StartInfo.ErrorDialog = false;
	p.StartInfo.RedirectStandardError = true;
	p.StartInfo.RedirectStandardInput = true;
	p.StartInfo.RedirectStandardOutput = true;
	p.StartInfo.UseShellExecute = false;
	p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
	p.Start();
	System.Threading.Thread.Sleep(10000); // for testing ...

	if (!p.HasExited)
	{
		p.WaitForExit(120000); // wait 2 minutes to finish
		if (!p.HasExited)
		{
			p.Kill();
		}
	}

	string output = p.StandardOutput.ReadToEnd();
}


Mohideenmeera

Привет Рик,

Спасибо за информацию.
Нужно ли мне добавлять / изменять какой-либо код в exe-файле, который был вызван из другого.
Если да, то пожалуйста, объясните то же самое....

RickZeeland

Если вы хотите, чтобы значения возвращались из exe-файла, то да.
Вам нужно вывести данные на консоль, что по умолчанию невозможно в Winforms, но вот способ сделать это: https://www.codeproject.com/Tips/68979/Attaching-a-Console-to-a-WinForms-application

RickZeeland

Может быть, проще просто записать вывод в файл и прочитать его из вашего приложения WPF.

Mohideenmeera

Спасибо за ваше время и ответ проверим, используя то же самое, и будем держать вас в курсе результата...

Mohideenmeera

Привет Рик,
Нашел еще одно решение, которое сработало в моем случае. Пожалуйста, найдите приведенный ниже код
Преобразовал exe-приложение в DLL и в Form1 [EXE] добавил этот код

public string variable1 { get { return OutList.Пункты[0].Метод toString(); } }

В Form2 используется приведенный ниже код для доступа к переменной variable1:

TestNameSpace.TestClass ss= новое пространство имен тестов.класс TestClass();
ПС.Метод showdialog();

Ящик для сообщений.Показать (ss. variable1.Метод toString());

Сработало, как и ожидалось.....
Спасибо за ваше время и объяснение....

RickZeeland

Поздравляю! поэтому не было необходимости, чтобы WinForms exe мог работать автономно.
Мне все еще любопытно, зачем вам понадобился Winforms здесь.