Блат не распознан как команда

У меня очень странная проблема. Я установил blat.exe, поместив его в папку c:/windows/system32, и я могу запустить его из командной строки.

Когда я запускаю его программно из С# Process.Start("cmd", "blat.exe blah blah"), он возвращает ошибку

«blat.exe» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.

Я также пытался указать полный путь, но он просто ответит

c:/Windows/System32/blat.exe не распознан...

У вас есть идеи/предложения? Заранее большое спасибо.


person edd    schedule 08.09.2015    source источник
comment
Вы никогда не должны сбрасывать случайные исполняемые файлы в системные каталоги Windows. Я предполагаю, что где-то вы в конечном итоге работаете как 32-битный процесс на 64-битной машине и, таким образом, нажимаете перенаправление файловой системы.   -  person Damien_The_Unbeliever    schedule 08.09.2015
comment
Вы хотите сказать, что Process.Start(@"C:\Windows\System32\blat.exe","args") не работает?   -  person rbm    schedule 08.09.2015
comment
пожалуйста, не пишите blah blah. а если проблема внутри бла бла?   -  person M.kazem Akhgary    schedule 08.09.2015


Ответы (2)


Вы не передаете допустимые аргументы в cmd. вот некоторая документация.

По сути, если вы хотите запустить cmd с аргументом, что он должен запустить blat.exe, а затем завершить работу, вам нужно будет передать /C "blat.exe blah blah". Вот так:

Process.Start("cmd", "/C \"blat.exe blah blah\"")

Однако, как кто-то уже сказал в комментариях, вы можете просто запустить blat.exe напрямую.

person Andreas Eriksson    schedule 08.09.2015

Я бы сказал, что Damien_The_Unbeliever был прав. Я просто переместил blat из каталога Windows в c:/blat/blat.exe, и он отлично работает. Для полноты и извините меня за предыдущую бла-бла-бла, команда, которая не удалась,

        static void ExecuteCommandSync(object command)
    {
        try
        {
            System.Diagnostics.ProcessStartInfo procStartInfo =
                new System.Diagnostics.ProcessStartInfo(@"C:/Windows/System32/blat.exe", "-server 127.0.0.1:1099 -subject Hello -to [email protected] -body theBody -p gmailsmtp -from [email protected]");
            System.Diagnostics.Process process;
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.RedirectStandardError = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;
            process = System.Diagnostics.Process.Start(procStartInfo);
            process.WaitForExit();
            var output = process.StandardOutput.ReadToEnd();
            var error = process.StandardError.ReadToEnd();
            var exitCode = process.ExitCode;
            Console.WriteLine(error);
            process.Close();
        }
        catch (Exception objException)
        {
            // to be logged
        }
    }

Вариант с cmd.exe /c c:/Windows/System32/blat.exe также не работал. Большое спасибо за вашу помощь

person edd    schedule 08.09.2015