Я создал редактор кода C++ на C# и теперь пытаюсь вызвать g++
для компиляции исходных файлов. Поэтому я скопировал установку TDM-GCC, помимо моей программы, и написал небольшой пакетный скрипт для вызова этого.Вызов G ++ из C# Program
@echo off
@set PATH="%~dp0TDM-GCC-32\bin\";%PATH%
call "%~dp0TDM-GCC-32\mingwvars.bat"
cd %1
"%~dp0TDM-GCC-32\bin\g++.exe" %2 -o %3
И из кода C#, я пытаюсь вызвать этот скрипт, используя CMD, как в этом скрипте кода.
string fileName = Path.GetFileName(CurrentFile);
string exeName = Path.GetFileNameWithoutExtension(CurrentFile) + ".exe";
string workingDir = Directory.GetParent(CurrentFile) + "";
string compile = Directory.GetParent(Application.ExecutablePath) + "\\compile.cmd";
File.Delete(Path.Combine(workingDir, exeName));
StartProcess(true, "cmd", "/c", "\"" + compile + "\"", workingDir, fileName, exeName);
А вот StartProcess
метод:
void StartProcess(bool hidden, string command, params string[] args)
{
ProcessStartInfo pStartInfo = new ProcessStartInfo();
pStartInfo.FileName = command;
pStartInfo.Arguments = string.Join(" ", args);
pStartInfo.UseShellExecute = false;
if (hidden)
{
pStartInfo.RedirectStandardError = true;
pStartInfo.RedirectStandardOutput = true;
pStartInfo.CreateNoWindow = true;
}
Process proc = new Process();
proc.StartInfo = pStartInfo;
proc.Start();
logBox.Clear();
if (hidden)
{
while (!proc.StandardError.EndOfStream)
{
logBox.AppendText(GetTimestamp() + " Error: " + proc.StandardError.ReadLine() + Environment.NewLine);
}
}
}
Update: 26-9-14
Я сомневался ли пакетный файл либо называется, потому что если я называю это из cmd, он просто работает. Так что я попытался echo
к стандартной ошибки из пакетного файла, как это:
echo %PATH% 1>&2
И я могу видеть, что папка бен в GCC находится в пути тоже, но по какой-то причине, ех не получает создан. Но иногда скрипт работает, и exe создается.
Но всякий раз, когда я выполняю это, в LOG ничего не будет, а также не создается исполняемый файл. Я знаю, что папка bin TDM-GCC должна находиться в PATH, но это то, что нужно сделать второй строке командного сценария. Не знаю, что это и почему эта ошибка.
Конец обновления
Любые предложения о том, как я могу получить это работает?
Спасибо.
Что вы видите, когда вы устанавливаете скрытый в false? что происходит, когда вы запускаете командный файл из командной строки? – ths
@ths Когда я начинаю с командной строки, командный файл работает на моем компьютере. Но когда я начал с процесса, он иногда работает, а иногда и нет. –
"иногда"? выше, вы говорите «когда угодно». так в чем разница между рабочими и нерабочими прогонами? – ths