Я использую окна 10.windres: имя файла, имя каталога, или синтаксис метки тома неправильно
Я пытаюсь скомпилировать файл C++ в C# с использованием MinGW (папка MinGW находится в директории проекта), но он не будет компилировать сценарий ресурсов (используя windres).
Когда я использую windres в cmd, он говорит: «C: /Users/username/AppData/Local/Temp/my.rc: 1: непризнанная escape-последовательность». но все еще работает. Но когда я запускаю ту же самую команду через C# (создавая процесс), она вообще не работает и говорит: «Имя файла, имя каталога или синтаксис метки тома неверны».
Мой код:
String tempDir = Path.GetTempPath();
String file = tempDir + "my.rc";
using (StreamWriter writer = new StreamWriter(file, false, Encoding.ASCII))
{
if (!textIcon.Text.Equals(""))
await writer.WriteLineAsync("25 ICON \"" + textIcon.Text + "\"");
if (checkAdmin.Checked)
{
String manifest = tempDir + @"\manifest.xml";
createManifest(manifest);
await writer.WriteLineAsync("55 24 \"" + manifest + "\"");
}
}
String args2 = "/c \"" + Path.Combine(gccLocation, "windres.exe") + "\" -o \"" + Path.Combine(tempDir, "my.o").Replace("\\", "/") + "\" \"" + file.Replace("\\", "/") + "\"";
//Debug
//args2 = "/k echo " + args2;
ProcessStartInfo psi2 = new ProcessStartInfo();
psi2.FileName = "CMD.exe";
psi2.Arguments = args2;
psi2.UseShellExecute = false;
psi2.CreateNoWindow = true;
//Debug
//psi2.CreateNoWindow = false;
Process windres = Process.Start(psi2);
windres.WaitForExit();
if(windres.ExitCode != 0)
{
MessageBox.Show("Error: Could not create resource file (" + windres.ExitCode + ")");
}
аргументы она проходит в ЦМД: /с "MinGW \ Bin \ windres.exe" -o "C: /Users/easyc/AppData/Local/Temp/my.o" «C:/Пользователи/easyc/AppData/Local/Temp/my.rc « – Yaron
Это может работать только последовательно, когда вы устанавливаете ProcessStartInfo.WorkingDirectory, чтобы он мог надежно найти подкаталог MinGW. Всегда предпочитайте имена полного пути, c: \ foo \ bar \ baz.ext –
Я добавил в этот бит кода: if (! File.Exists (gccLocation + @ "windres.exe")) MessageBox.Show (" windres не существует "); еще MessageBox.Show ("windres exists."); и в окне сообщений указано «windres exists». – Yaron