Параметры программы C # из командной строки? - PullRequest
1 голос
/ 05 октября 2010

Я пытаюсь запустить программу на C #, а затем дать ей команду из cmd.exe после ее запуска. Например, предположим, что я запустил мой .exe из командной строки (C: //FILEPATH/my_program.exe). Затем я хотел бы, чтобы эта программа продолжала работать, а затем я мог передавать ей команды, которые она способна обработать. В моем идеальном мире это было бы что-то вроде «C: //FILEPATH/my_program.exe run_my_command ()», которая выполняла бы функцию run_my_command, или «C: //FILEPATH/my_program.exe k», которая выполняла бы что-то в ответ на char k, в котором я предварительно запрограммировал. Я знаю, что при вводе я запустил бы новую копию my_program.exe. Я бы хотел, чтобы только один пробежал, пока я передаю что-то подобное.

Кто-нибудь знает, как это сделать? Пример кода был бы замечательно оценен. Спасибо !!

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

Самое простое решение для вашего второго экземпляра «my_program.exe» - найти существующий экземпляр, который уже запущен, «передать» ему сообщение и сразу же завершить работу.

Обычный способэто реализуется через именованные каналы ( System.IO.Pipes в .NET 3.5+).Когда ваша программа запускается, слушайте именованный канал с заданным именем.Если что-то еще прослушивает этот канал, отправьте ему сообщение и выйдите.

1 голос
/ 05 октября 2010

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

Командный инструмент связывается с процессом через классический IPC (локальный RPC, каналы, разделяемая память и т. д.).

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