Невозможно установить Process.StartInfo.WorkingDirectory для вызова exe из c # - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь вызвать chrome.exe внутри C # программы с использованием System.Diagnostics.Process пространства имен.

my chrome.exe находится внутри пути C: \ Program Files (x86) \ Google \ Chrome \ Application

, если я вызываю RunProc функциюпередав следующие параметры - (оставьте абсолютный путь к exe и оставьте WorkingDirectory пустым)

( "C: \ Program Files (x86) \ Google \ Chrome \ Application \ Chrome.exe", "https://www.google.com", "" ) все работает отлично.

Но с параметрами -

( "Chrome.exe," https://www.google.com", "C: \ Program Files (x86) \ Google \ Chrome \ Application ") выдает исключение на шаге proc.Start (); заявив - Системе не удается найти указанный файл.

Я также пытался написать WorkingDirectory = workingDir при инициализации StartInfo, но все еще в поисках решений.

class Program
{
    static void Main(string[] args)
    {
        RunProc(@"chrome.exe", @"https://www.google.com", @"C:\Program Files (x86)\Google\Chrome\Application");
    }

    static bool RunProc(string exe, string args, string workingDir)
    {
        Process proc = new Process
        {
            StartInfo =
            {
                FileName =  exe,
                CreateNoWindow = true,
                RedirectStandardInput = true,
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = false,
                RedirectStandardError = true,
                RedirectStandardOutput = true,
                Arguments = args,
                //WorkingDirectory = workingDir
            }
        };

        if (!string.IsNullOrEmpty(workingDir))
        {
            proc.StartInfo.WorkingDirectory = workingDir;
        }

        proc.Start();
        proc.StandardInput.WriteLine(args);
        proc.StandardInput.Flush();
        proc.StandardInput.Close();

        return true;
    }

}

Ответы [ 2 ]

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

Единственный способ для этого - изменить ваш рабочий каталог на переданный в рабочий каталог, прежде чем пытаться запустить другой процесс.Свойство WorkingDirectory является именно этим и никак не влияет на поиск исполняемого файла для запуска.Это зависит только от вашего рабочего каталога и вашей переменной окружения PATH, если вы не можете указать полное имя.

static bool RunProc(string exe, string args, string workingDir)
{
    var prevWorking = Environment.CurrentDirectory;
    try
    {
        Environment.CurrentDirectory = workingDir;
        Process proc = new Process
        {
            StartInfo =
            {
               FileName =  exe,
               CreateNoWindow = true,
               RedirectStandardInput = true,
               WindowStyle = ProcessWindowStyle.Hidden,
               UseShellExecute = false,
               RedirectStandardError = true,
               RedirectStandardOutput = true,
               Arguments = args,
            }
        };

        proc.Start();
        proc.StandardInput.WriteLine(args);
        proc.StandardInput.Flush();
        proc.StandardInput.Close();

        return true;
    }
    finally
    {
        Environment.CurrentDirectory = prevWorking;
    }
}
0 голосов
/ 15 ноября 2018

Почему бы просто не вызвать .exe с пути, по которому он расположен напрямую?

Process.Start(@"C:\new\folder\abcd.exe");

или просто поставить

proc.StartInfo.WorkingDirectory = @"c:\new\folder";

перед proc.start ();

...