Как выполнить файл .bat из приложения формы C # windows? - PullRequest
11 голосов
/ 26 декабря 2008

Мне нужно, чтобы приложение C # 2005 GUI вызывало .bat и несколько файлов VBScript по запросу пользователя. Это просто временное решение до конца праздников, и я могу написать все это на C #. Я могу заставить файлы VBScript работать без проблем, но я не могу выполнить файл .bat. Когда я «щелкаю» в приложении C # для запуска .bat-файла, окно DOS открывается и закрывается очень быстро, а тестовый .bat-файл не выполняется - «Windows не распознает bat как внутреннюю или внешнюю команду» - это ошибка вернулся в поле DOS. Если я просто дважды щелкну по файлу .bat или запусту его вручную из командной строки, он выполнится. Мне также нужно, чтобы файл .bat выполнялся без вывода сообщений, если не требуется взаимодействие с пользователем - этот сценарий копирует файлы размером более 11k в папки на сетевом компьютере, и иногда Windows «забывает», если местом назначения является файл или каталог, и просит пользователя сообщить об этом. что это такое (это совсем другой вопрос, не обсуждаемый здесь ... не говоря уже о том, что меня это раздражает).

Пока в моем источнике C # есть следующее:

Process scriptProc = new Process();


        if (File.Exists("c:\\scripts\\batchfile1.bat"))
        {

            scriptProc.StartInfo.FileName = @"cscript";
            scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
            scriptProc.Start();
            scriptProc.WaitForExit(1500000);
            scriptProc.Close();

        }

        if (!File.Exists("c:\\scripts\\batchfile1.bat"))
        {
        }

Я знаю, что этот код не работает - но по сути это то, что я хочу, чтобы он делал. То, что я смотрю, это что-то вроде этого для файлов .bat. Я предполагаю, что должен сказать системе использовать cmd для запуска .bat. Я в растерянности относительно того, как это сделать. Я проверил этот сайт , который предназначен для C # 2003. Мне не очень помогает, так как я очень зеленый с C #.

РЕДАКТИРОВАТЬ: Используя сообщение Кевина, я попытался его снова. Тот же сценарий решения из этого поста, но измененный для меня, так как мне не нужно перенаправлять:

 System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
            proc.StartInfo.RedirectStandardError = false;
            proc.StartInfo.RedirectStandardOutput = false;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            proc.WaitForExit();

Ответы [ 2 ]

11 голосов
/ 26 декабря 2008

Вот что вы ищете:

Служба зависает на WaitForExit после вызова командного файла

Речь идет о том, почему служба не может выполнить файл, но показывает весь код, необходимый для этого.

0 голосов
/ 09 марта 2012

При возникновении проблемы с пакетным файлом, спрашивающим пользователя, является ли место назначения папкой или файлом, если вы заранее знаете ответ, вы можете сделать так:

Если местом назначения является файл: эхо е | [путь к пакетному файлу]

Если папка: эхо д | [путь к пакетному файлу]

По сути, он просто направляет букву после "эха" на вход пакетного файла.

...