Запуск exe в C # с параметрами командной строки, подавление окна dos - PullRequest
2 голосов
/ 30 марта 2010

Я использую lame для транскодирования для одного из моих проектов. Проблема в том, что когда я вызываю lame из C #, появляется окно DOS. Есть ли способ, которым я могу подавить это?

Вот мой код:

Process converter =
    Process.Start(lameExePath, "-V2 \"" + waveFile + "\" \"" + mp3File + "\"");

converter.WaitForExit();

Ответы [ 4 ]

8 голосов
/ 30 марта 2010

Вы пробовали что-то вроде:

using( var process = new Process() )
{
    process.StartInfo.FileName = "...";
    process.StartInfo.WorkingDirectory = "...";
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.UseShellExecute = false;
    process.Start();
}
3 голосов
/ 30 марта 2010
Process bhd = new Process(); 
bhd.StartInfo.FileName = "NSOMod.exe";
bhd.StartInfo.Arguments = "/mod NSOmod /d";
bhd.StartInfo.CreateNoWindow = true;
bhd.StartInfo.UseShellExecute = false;

Это другой способ.

3 голосов
/ 30 марта 2010

Предполагая, что вы вызываете его через Process.Start, вы можете использовать перегрузку, которая принимает ProcessStartInfo, для которого свойство CreateNoWindow установлено на true и UseShellExecute, установленный на false.

К объекту ProcessStartInfo также можно получить доступ через свойство Process.StartInfo, и его можно установить непосредственно перед началом процесса (проще, если у вас есть небольшое количество свойств для настройки).

2 голосов
/ 30 марта 2010

Это мой код, который делает то же самое (и также читает код вывода и возврата)

        process.StartInfo.FileName = toolFilePath; 
        process.StartInfo.Arguments = parameters; 

        process.StartInfo.UseShellExecute = false; // needs to be false in order to redirect output 
        process.StartInfo.RedirectStandardOutput = true; 
        process.StartInfo.RedirectStandardError = true; 
        process.StartInfo.RedirectStandardInput = true; // redirect all 3, as it should be all 3 or none 
        process.StartInfo.WorkingDirectory = Path.GetDirectoryName(toolFilePath); 

        process.StartInfo.Domain = domain; 
        process.StartInfo.UserName = userName; 
        process.StartInfo.Password = decryptedPassword; 

        process.Start(); 

        output = process.StandardOutput.ReadToEnd(); // read the output here... 

        process.WaitForExit(); // ...then wait for exit, as after exit, it can't read the output 

        returnCode = process.ExitCode; 

        process.Close(); // once we have read the exit code, can close the process 
...