Как передать аргументы в командный файл? - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть требование для запуска набора * .sql файлов с использованием командного файла, подобного этому.

private void btn_Execute_Click(object sender, EventArgs e)
{
  try {
    //Creating A batch file to execute the scripts using SQLPLUS....
    FileInfo fi5 = new FileInfo("c:/EMPSCRIPTS/execute.bat");
    StreamWriter sw2 = fi5.CreateText();
    sw2.WriteLine("@Echo Off \r \nsqlplus scotte/tiger@emp @\"c:/EMPSCRIPTS/RUNALL.sql\" \r \nEXIT ");
    sw2.Close();

    System.Diagnostics.Process proc; // Declare New Process
    proc = System.Diagnostics.Process.Start(ConfigurationManager.AppSettings["BatFilePath"].ToString()); // run test.bat from command line.
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.RedirectStandardOutput = true;
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/c" + ConfigurationManager.AppSettings["BatFilePath"].ToString();
    proc.StartInfo.RedirectStandardError = true;
    proc.StartInfo.RedirectStandardInput = true;
    proc.StandardOutput.ReadToEnd();
    proc.WaitForExit();
    proc.Close();
  }
  catch (Exception ex) {
    MessageBox.Show("Insertion Completed");
  }

}

Но я хочу остановить ненужное выполнение некоторых файлов. Я нашел вариант для передачи параметров. Я хочу дать параметры файлам статически. Исходя из пользовательского ввода, этот параметр должен быть выполнен. Кто-нибудь может мне помочь? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Вы изменяете значения StartInfo после запуска процесса, что никак не влияет на процесс. См. Раздел «Замечания» здесь для получения дополнительной информации.

Создайте новый экземпляр ProcessStartInfo , настройте его с тем, что вам нужно, затем передайте его в Перегрузка Start , которая принимает экземпляр этого типа.

Кроме того, как только вы измените свой код, вы можете пропустить запись командной строки в командный файл.Ваше исполняемое имя файла равно sqlplus, а аргументы равны scotte/tiger@emp @\"c:/EMPSCRIPTS/RUNALL.sql\"

1 голос
/ 28 февраля 2011

Вы злоупотребляете Process.Start.

Вам необходимо создать новый объект ProcessStartInfo, установить все его свойства и передать его Process.Start.

Изменение StartInfo уже запущенного процесса, как делает ваш код, не имеет никакого эффекта.

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