как запустить новый экземпляр второго проекта в новом процессе - PullRequest
5 голосов
/ 21 сентября 2011

Я хочу показать окно (WPF), которое определено в отдельном проекте библиотеки классов как новый отдельный процесс.Есть ли способ сделать это?

Мне нужно запустить второй экземпляр проекта в новом процессе, потому что остается память, когда я запускаю его таким образом:

secondProject.WPFWindow win = new secondProject.WPFWindow();
win.Show();

У меня естьОдно решение с несколькими проектами.

  • Проект запуска - приложение WPF, тип вывода: приложение Windows (exe-файл).
  • Все остальные проекты - приложение WFP, тип вывода: библиотека классов (файл dll).

Теперь я запускаю «приложения» (другие проекты в этом одном решении, построенные как dll) по следующему коду:

secondProject.WPFWindow win = new secondProject.WPFWindow();
win.Show();

Я хочу запустить приложения в новом процессе... Обычно я бы использовал Process.Start(), но я не могу в этом случае, потому что ему нужен exe-файл в качестве agrument, и у меня есть (и я хочу) DLL.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Вы можете передать аргументы командной строки в основной файл .exe, чтобы сообщить ему, какие из «подпрограмм» следует запустить.Затем основной .exe-файл может просто запуститься в новом процессе и сообщить новому экземпляру, какое вспомогательное приложение запустить.Например, в основном приложении .exe поместите логику в класс приложения следующим образом:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        //See if exactly one command line argument was passed
        if (e.Args.Length == 1)
        {
            //See if the argument is one of our 'known' values
            switch (e.Args[0])
            {
                case "launchApp2":
                    secondProject.WPFWindow win2 = new secondProject.WPFWindow();
                    win2.Show();
                    break;
                case "launchApp3":
                    thirdProject.OtherWPFWindow win3 = new thirdProject.OtherWPFWindow();
                    win3.Show();
                    break;
            }
        }

        //Probably want to call the base class always?
        base.OnStartup(e);
    }
}

Затем, когда вы захотите запустить одно из вложенных приложений в новом процессе, вы можете сделать это так:

public void LaunchApp2()
{
    //Start a new process that is ourself and pass a command line parameter to tell
    //  that new instance to launch App2
    Process.Start(Assembly.GetEntryAssembly().Location, "launchApp2");
}
0 голосов
/ 21 сентября 2011

Предположим, у вас есть решение с 2 проектами - один проект компилируется в приложение (EXE), а второй компилируется в библиотеку классов (DLL).Я предполагаю, что DLL имеет определенный тип (скажем, окно), который вы хотите запустить из EXE.

Самый простой способ сделать это - просто добавить ссылку на DLL.Щелкните правой кнопкой мыши по проекту EXE в обозревателе решений и выберите Добавить ссылку ... .Подождите минуту, пока откроется диалоговое окно.На вкладке Проекты выберите проект DLL.Нажмите OK.

Теперь в вашем проекте EXE WPFWindow будет доступно как импортированный тип.Вам необходимо добавить

using secondProject;

в начало каждого файла кода, который использует WPFWindow.Обычно я делаю это автоматически, используя сочетание клавиш CTRL + Period.

Метод, который я описал, является стандартным методом использования DLL в C #.Вы можете загрузить их вручную, но это немного сложнее, и, скорее всего, это не то, что вам нужно.

Редактировать:

Алексей прав.Я думаю, что у нас есть проблема XY .То, что вы пытаетесь сделать, вероятно, очень просто, но подход (создание экземпляра окна, определенного в DLL) не таков.

Помните, что любой код, который вы запускаете (в вашем случае, ваш WPFWindow)должен происходить из приложения, даже если сам код определен в DLL.DLL сама по себе обычно не предоставляет операционной системе информации о том, как запустить любой код, содержащийся внутри.

Подумайте о добавлении другого EXE-проекта, который запускает ваш WPFWindow, который вы вызываете с помощью Process.Это предложение может быть ошибочным, так как мы до сих пор не знаем, какова ваша конечная цель.Вы спрашиваете: «Как мне хлопать крыльями, как птицей?»когда правильным вопросом может быть «Как купить билет на самолет?»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...