Как заставить приложение без окон / из командной строки вернуться, но продолжить работу в фоновом режиме? - PullRequest
3 голосов
/ 15 февраля 2011

Я пишу приложение командной строки в .Net.Само приложение довольно простое, но оно должно синхронно подключаться к веб-сервису, который, в свою очередь, должен подключаться к базе данных Oracle, и эти части любят тратить свое время.

Есть ли простой способ (без разделения моего exe-приложения на две части) продолжить выполнение, но, тем не менее, привести к выполнению в командной строке?

Это Windows, поэтому нет "&".Кроме того, я не могу использовать командлет cmd.exe "start".

Ответы [ 3 ]

6 голосов
/ 15 февраля 2011

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

static void Main(string[] args)
{
    if (args.Length > 0 && args[0] == "run")
    {
        //actually run your application here
    }
    else
    {
        //create another instance of this process
        ProcessStartInfo info = new ProcessStartInfo();
        info.FileName = Assembly.GetExecutingAssembly().Location;
        info.Arguments = "run";
        info.UseShellExecute = false;
        info.CreateNoWindow = true;

        Process.Start(info);
    }
}

Что-то в этом роде в любом случае, просто списать это с моей головы.По сути, он создает новый экземпляр того же исполняемого файла, но новый процесс видит аргумент командной строки «run» и выполняет работу, а не порождает новый экземпляр.Установка опций, которые у меня есть, должна позволять порожденному процессу печатать и на существующей консоли.

3 голосов
/ 15 февраля 2011

Ваше приложение может запустить второй экземпляр сам с дополнительным параметром.Поэтому, если вы запускаете «MyApp param1 param2», то он запускает «MyApp -synch param1 param2» и завершается.Второй экземпляр видит параметр "-synch" и выполняет работу.

В качестве небольшой альтернативы, запуск "MyApp p1 p2" фактически выполняет работу (синхронно), но если вы запустите "MyApp -asynch p1 p2«Затем он запускает« MyApp p1 p2 »и завершает работу.

Это два процесса, но по крайней мере это только один exe

0 голосов
/ 15 февраля 2011

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

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