Передача нескольких аргументов для запуска консольного приложения из формы Windows - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть консольное приложение, назовем его X.exe .Он работает с двумя аргументами, скажем, 'a' и 'a.tmp', где a - это имя моего входного файла и a.tmp - выводИмя файла .В консоли я обычно запускаю приложение, например: X a a.tmp , но сначала я должен присутствовать в месте расположения входного файла 'a', иначе приложение не будет работать, если я попытаюсь указать его абсолютный путь. Я создал форму окна для запуска этих консольных приложений, но, как я уже говорил, приложение должно быть запущено в папке с файлом.Я пытался использовать объект процесса, но приложение не работало.Я создал два процесса:

  1. перейдите в папку с файлом
  2. , чтобы выполнить приложение в расположении файла

Question: can I excute these multiple commands in one go and avoid using IPC?

1 Ответ

0 голосов
/ 16 сентября 2018

Можно использовать ProcessStartInfo.WorkingDirectory.

Например, из MS Docs - класс ProcessStartInfo

Свойство WorkingDirectory ведет себя по-разному, когда UseShellExecute равно true, чем когда UseShellExecute равно false.Если UseShellExecute равно true, свойство WorkingDirectory указывает местоположение исполняемого файла.Если WorkingDirectory - пустая строка, то текущий каталог считается содержащим исполняемый файл.

Примечание. Если UseShellExecute равен true, рабочий каталог приложения, запускающего исполняемый файл,также рабочий каталог исполняемого файла.

Когда UseShellExecute равен false, свойство WorkingDirectory не используется для поиска исполняемого файла.Вместо этого его значение относится к процессу, который запущен и имеет значение только в контексте нового процесса.

Например

    public static void Main()
    {
        Process myProcess = new Process();

        try
        {                
            myProcess.StartInfo.UseShellExecute = true;

            // You can start any process, HelloWorld is a do-nothing example.
            myProcess.StartInfo.FileName = "X.exe"; /
            myProcess.WorkingDirectory = "C:\SomeDirectory That contains A and A.tmp"
            myProcess.Start();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
...