В настоящее время я создаю проект, использующий fontforge, и вызываю его из C # как процесс, запускающий bash.exe и запускающий fontforge в качестве аргументов командной строки.
Вот пример:
Process p = new Process();
string cygwinDir = @"c:\cygwin\bin";
p.StartInfo.FileName = Path.Combine(cygwinDir, "bash.exe");
p.StartInfo.Arguments = "--login -c \"fontforge.exe -script '" + this.cygwinWorkPath + "script.pe";
p.StartInfo.WorkingDirectory = this.windowsWorkPath;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.Start();
p.WaitForExit();
var standardError = p.StandardError.ReadToEnd();
var standardOutput = p.StandardOutput.ReadToEnd();
var exitCode = p.ExitCode;
cygwinWorkpath - это что-то вроде / myworkfolder, а windowsWorkPath - как c: \ cygwin \ myworkfolder.