Выполнить команду ОС для файла C # - PullRequest
3 голосов
/ 10 августа 2011

Я пытаюсь выполнить команду ОС через C #. У меня следующий код взят из этой веб-страницы :

//Execute command on file
ProcessStartInfo procStart = 
    new ProcessStartInfo(@"C:\Users\Me\Desktop\Test\System_Instructions.txt", 
                         "mkdir testDir");

//Redirects output
procStart.RedirectStandardOutput = true;
procStart.UseShellExecute = false;

//No black window
procStart.CreateNoWindow = true;

//Creates a process
System.Diagnostics.Process proc = new System.Diagnostics.Process();

//Set start info
proc.StartInfo = procStart;

//Start
proc.Start();

но при попытке запустить код я получаю следующую ошибку:

{"The specified executable is not a valid application for this OS platform."}

Что я делаю не так? Я попробовал этот пример, а также , но получил ту же проблему.

Ответы [ 7 ]

6 голосов
/ 10 августа 2011

Перегрузка используемого вами конструктора ProcessStartInfo предполагает имя исполняемого файла и передаваемые ему параметры - файл .txt сам по себе не выполняется.

Звучит так, будто вы хотите выполнить командный файл с командами внутри файла.Для этого проверьте этот поток SO: Как использовать ProcessStartInfo для запуска пакетного файла?

3 голосов
/ 20 декабря 2012

Попробуйте установить для элемента USESHELLEXECUTE значение ИСТИНА вместо ЛОЖЬ.

Это сработало для меня - но я думаю, что после публикации это вызывает определенные негативные последствия.

2 голосов
/ 10 августа 2011

Вы пытаетесь выполнить файл TXT.Вот почему вы получаете

{"Указанный исполняемый файл не является допустимым приложением для этой платформы ОС."}} 1004 *

Поскольку указанный исполняемый файл (TXT)не является допустимым приложением для этой платформы ОС.

1 голос
/ 10 августа 2011

Вы бы выбрали целевой исполняемый файл или другой файл с указанным открывающим приложением.Вы нацелены на текстовый файл;то, что вам нужно сделать, это целевой Блокнот, а затем указать путь к вашему текстовому файлу в качестве аргумента:

ProcessStartInfo info = new ProcessStartInfo
{
    FileName = "C:\\Windows\System32\\notepad.exe",
    Arguments = "C:\\Users\\Me\\Desktop\\Test\\System_Instructions.txt"
}

new Process.Start(info);

В качестве альтернативы, если вы хотите, чтобы ваш текстовый файл был выполнен, его нужно сделать a.файл летучей мыши.

0 голосов
/ 10 августа 2011

Чего ты пытаешься достичь? Создать каталог? Используйте метод «System.IO.Directory.CreateDirectory». Открыть файл .txt с соответствующей программой? Используйте ProcessStartInfo (@ ". \ Filename.txt") с параметром UseShellExecute, установленным в значение true. Это приведет к выполнению связанной программы для этого типа файла, который может быть не notepad.txt.

0 голосов
/ 10 августа 2011

Если вы хотите открыть файл в Блокноте, используйте:

ProcessStartInfo procStart = 
    new ProcessStartInfo("notepad.exe", @"C:\Users\Me\Desktop\Test\System_Instructions.txt");

Если вы хотите записать в файл:

        //In case the directory doesn't exist
        Directory.CreateDirectory(@"C:\Users\Me\Desktop\Test\);
        using (var file = File.CreateText(@"C:\Users\Me\Desktop\Test\System_Instructions.txt"))
        {
            file.WriteLine("mkdir testDir");
        }

Если у вас есть команды в текстовом файле, которые вы хотите выполнить, просто переименуйте его в .bat, и он должен работать (и, возможно, содержимое делает что-то с «mkdir testDir» в качестве параметра?)

0 голосов
/ 10 августа 2011

Вы пытаетесь выполнить это:

C:\Users\Me\Desktop\Test\System_Instructions.txt mkdir testDir

Оболочка не имеет ни малейшего представления о том, как «выполнить» текстовый файл, поэтому команда не выполняется.

Если вы хотите выполните этот текстовый файл как пакетный файл, измените расширение файла на .bat, чтобы система понимала, что это пакетный файл, а затем установите UseShellExecute, чтобы выполнить для него действие по умолчанию (= запускает его в случаепакетный файл).

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