Есть консольное приложение — Console1.exe (.NET FW 4.8)
1. Открываем окно команднйо строки, пишем путь к Console1.exe — приложение запускается в том же окне и том же процессе
2. Пишем в командной строке "start Console1.exe" — запускается в другом процессе и другом окне
Вопрос — можно ли написать консольное приложение так, чтобы оно при запуске эмулировало команду start и запускалось в другом процессе и другом окне?
как любое windows-приложение, к примеру
Спасибо
PS. bat-файл просьба не предлагать
Re: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали: D>1. Открываем окно команднйо строки, пишем путь к Console1.exe — приложение запускается в том же окне и том же процессе
нет, не в том же. Посмотрите таск менеджером — стартует другой процесс. D>2. Пишем в командной строке "start Console1.exe" — запускается в другом процессе и другом окне
D>Вопрос — можно ли написать консольное приложение так, чтобы оно при запуске эмулировало команду start и запускалось в другом процессе и другом окне?
Скорее всего, вас спасёт последовательность из вызовов FreeConsole(), AllocConsole()
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Как запустить Console, эмулируя запуск через start?
Здравствуйте, Sinclair, Вы писали:
D>>1. Открываем окно команднйо строки, пишем путь к Console1.exe — приложение запускается в том же окне и том же процессе S>нет, не в том же. Посмотрите таск менеджером — стартует другой процесс.
пусть так, но handle окна тот же
S>Скорее всего, вас спасёт последовательность из вызовов FreeConsole(), AllocConsole()
а если я запускаю из проводника?
Re[3]: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали: D>пусть так, но handle окна тот же
Потому, что дочерний процесс по умолчанию аттачится к консоли родительского.
S>>Скорее всего, вас спасёт последовательность из вызовов FreeConsole(), AllocConsole() D>а если я запускаю из проводника?
Проверьте.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали:
D>Вопрос — можно ли написать консольное приложение так, чтобы оно при запуске эмулировало команду start и запускалось в другом процессе и другом окне?
Можно.
Заведите параметр. Если он указан, то приложение стартует в нормальном режиме. Если нет, то выполняется (или ставится в очередь планировщика для запуска с задержкой) запуск самого себя с параметром.
Но стандартное ожидаемое поведение консольных программ — подключение к родительской консоли, если она есть, а не порождение новой.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали:
D>Вопрос — можно ли написать консольное приложение так, чтобы оно при запуске эмулировало команду start и запускалось в другом процессе и другом окне? D>как любое windows-приложение, к примеру
D>Спасибо
если я правильно понял, то вот так
using System;
using System.Diagnostics;
Process.Start(new ProcessStartInfo() {
...
UseShellExecute = true
});
Re[4]: Как запустить Console, эмулируя запуск через start?
Здравствуйте, Sinclair, Вы писали:
S>Потому, что дочерний процесс по умолчанию аттачится к консоли родительского.
переиграть это средствами C# можно?
или надо API подключать
D>>а если я запускаю из проводника? S>Проверьте.
там отдельное консольное окно, разумеется
Re[2]: Как запустить Console, эмулируя запуск через start?
Здравствуйте, akasoft, Вы писали:
A>Заведите параметр. Если он указан, то приложение стартует в нормальном режиме. Если нет, то выполняется (или ставится в очередь планировщика для запуска с задержкой) запуск самого себя с параметром.
вопрос был про реализацию, а не как запустить
Re[2]: Как запустить Console, эмулируя запуск через start?
Здравствуйте, gandjustas, Вы писали: G>если я правильно понял, то вот так
это запуск внешнего приложения,
а мне нужен запуск моего из командной строки в другое окно
Re[3]: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали: S>>Потому, что дочерний процесс по умолчанию аттачится к консоли родительского. D>переиграть это средствами C# можно?
Насколько я знаю, готовой библиотеки для этого нет.
Но тут, собственно, две функции без параметров. [DllImport] в руки — и вперёд.
D>>>а если я запускаю из проводника? S>>Проверьте. D>там отдельное консольное окно, разумеется
Я думал, вас беспокоит то, что произойдёт при запуске приложения, которое отключается от консоли и заново её инициализирует, из проводника. Скорее всего, окно моргнёт.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали:
D>Вопрос — можно ли написать консольное приложение так, чтобы оно при запуске эмулировало команду start и запускалось в другом процессе и другом окне? D>как любое windows-приложение, к примеру
Так пойдёт?
internal class Program
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
static void Main(string[] args)
{
GetWindowThreadProcessId(GetConsoleWindow(), out var pid);
if (pid != Process.GetCurrentProcess().Id)
{
Process.Start(Environment.CommandLine);
return;
}
Console.WriteLine("Output String");
Console.ReadKey();
}
}
Если окно консоли принадлежит другому процессу, то запускаем сами себя заново, а этот процесс закрываем.
Если тот же процесс, значит работаем дальше.
Re: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали:
D>Вопрос — можно ли написать консольное приложение так, чтобы оно при запуске эмулировало команду start и запускалось в другом процессе и другом окне?
"start Console1.exe"
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Как запустить Console, эмулируя запуск через start?
Здравствуйте, mDmitriy, Вы писали:
D>Есть консольное приложение — Console1.exe (.NET FW 4.8) D>1. Открываем окно команднйо строки, пишем путь к Console1.exe — приложение запускается в том же окне и том же процессе D>2. Пишем в командной строке "start Console1.exe" — запускается в другом процессе и другом окне
D>Вопрос — можно ли написать консольное приложение так, чтобы оно при запуске эмулировало команду start и запускалось в другом процессе и другом окне?
См. https://github.com/evilguest/ConsoleExt
Уйдемте отсюда, Румата! У вас слишком богатые погреба.