Можно ли запустить приложение Windows в окне консоли? - PullRequest
4 голосов
/ 06 декабря 2011

У меня есть приложение для Windows, которое я написал на C # 4 и WPF; Теперь меня спросили, могу ли я добавить параметр командной строки (например, / console), который заставил бы его работать как консольное приложение, чтобы он мог запускаться планировщиком задач.

Возможно ли это с современными приложениями? Или мне нужно создать отдельное консольное приложение?

ОБНОВЛЕНИЕ : могу ли я просто подчеркнуть, что это приложение WPF . Не существует удобной static void Main(string[] args) точки входа для подключения. Но PM все равно хотел бы, чтобы приложение имело возможность запуска из командной строки ...

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ : хитрость, на которую указывает @ RodH257, заключается в том, что приложение WPF кодирует ожидаемый статический пробел Main. Вы можете добавить свой собственный класс с тем же методом и в свойствах сборки проекта установить его в качестве объекта запуска для исполняемого файла. Вам также понадобится атрибут [STAThread] в методе, чтобы WPF также работал правильно.

Ответы [ 6 ]

4 голосов
/ 06 декабря 2011

Да, приложение Windows GUI имеет Main, как консольное приложение.Таким образом, хитрость заключается в том, чтобы сделать некоторую предварительную обработку Main перед началом цикла пользовательского интерфейса.Следует отметить, что если вы хотите использовать консоль из приложения, скомпилированного как .NET-приложение «Windows» в Visual Studio, вам придется AllocConsole вручную, поскольку вы его не получите.по умолчанию.

В этой ветке форума MSDN обсуждается еще немного о "гибридных приложениях консоли / графического интерфейса".

2 голосов
/ 06 декабря 2011

Вы можете запустить его из консольного приложения, используя команду dos, но, если вы не измените подпрограмму запуска (в Main()) при запуске, оно будет загружаться и отображать главное окно ... Если вы нене нужно отображать главное окно, просто перекодируйте основную подпрограмму, чтобы параметр Main() отключил эту опцию ...

Вместо этого:

    [STAThread]
    static void Main()
    {
       Application.Run(new MainForm());
    }

закодируйте это:

    [STAThread]
    static void Main(params string[] args)
    {
         if(args.length <= 1)
              Application.Run(new MainForm());
         else if (args[1].StartsWith("C")) // "C" for "C"onsole version
              // Do whatever needs to be done to start 
              //    functionality for console app version 
    }

Затем при запуске добавьте ключ / C:

   C:\MyCurrentDirectory>MyWinFormsApplicationName.exe /C
1 голос
/ 06 декабря 2011

Вы можете превратить его в консольное приложение и вручную отобразить первый диалог WPF. как если бы вы создавали DLL и запускали окно WPF, как показано ниже

 static class Program
{
    static void Main(params string[] args)
    {
        if (args.Length > 0)
        {
           //do stuff here
            return;
        }
          Window1 window = new Window1();
          window.ShowDialog();
    }
}

ИЛИ, посмотрите на эту ссылку для редактирования точки входа в вашем текущем проекте WPF и действуйте на основе аргументов Как написать собственный метод Main для приложения WPF?

EDIT: Обновленный пост, чтобы сделать его более понятным для конкретной ситуации, описанной.

0 голосов
/ 06 декабря 2011

Если он запускается планировщиком задач, вам вообще не нужен экран.удалите startupuri и вручную запустите окна в зависимости от командной строки.

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

0 голосов
/ 06 декабря 2011

Вот пример статьи / кода , показывающий, как это делается . Тип сборки важен. Ваш компилятор позволяет вам иметь только одну цель сборки (например, графический интерфейс, командную строку).

0 голосов
/ 06 декабря 2011

Это очень зависит от того, как изначально была написана программа.

Если вы написали свою логику в слабосвязанной форме, вы можете создать другое консольное приложение и повторно использовать свою логику там. Это ручное программирование / рефакторинг.

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