2010-03-30 8 views
2

J'utilise lame pour le transcodage pour l'un de mes projets. Le problème est que lorsque j'appelle lame de C#, une fenêtre DOS apparaît. Est-ce que je peux supprimer cela?Exécution d'un exe en C# avec les paramètres de la ligne de commande, suppression de la fenêtre DOS

Voici mon code à ce jour:

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

converter.WaitForExit(); 
+2

Que diriez-vous de nous montrer un peu de code? –

Répondre

8

Avez-vous essayé quelque chose comme:

using(var process = new Process()) 
{ 
    process.StartInfo.FileName = "..."; 
    process.StartInfo.WorkingDirectory = "..."; 
    process.StartInfo.CreateNoWindow = true; 
    process.StartInfo.UseShellExecute = false; 
    process.Start(); 
} 
+0

le processus.WaitForExit(); ne fonctionne pas tout à fait correctement si cela est utilisé. Est-il possible d'éviter la fenêtre Dos ainsi que de maintenir le programme en attente, jusqu'à ce que le processus se termine? – Egon

+0

@Egon: quel est le problème avec WaitForExit() ;? Je l'utilise et je n'ai jamais eu de problèmes jusqu'à présent. – tanascius

+0

J'utilise lame pour changer dans le fichier encoder. dans les prochaines lignes je joue le fichier nouvellement encodé. Si je le fais sans la fenêtre DOS, je crèche en disant que le fichier n'existe pas. – Egon

3

En supposant que vous appelez via Process.Start, vous pouvez utiliser la surcharge qui prend ProcessStartInfo qui a son La propriété CreateNoWindow est définie sur true et UseShellExecute sur false. L'objet ProcessStartInfo est également accessible via la propriété Process.StartInfo et peut y être défini directement avant le démarrage du processus (plus facile si vous avez un petit nombre de propriétés à configurer).

3
Process bhd = new Process(); 
bhd.StartInfo.FileName = "NSOMod.exe"; 
bhd.StartInfo.Arguments = "/mod NSOmod /d"; 
bhd.StartInfo.CreateNoWindow = true; 
bhd.StartInfo.UseShellExecute = false; 

Est un autre moyen.

2

Ceci est mon code qui fait une chose semblable, (et lit également la sortie et le code de retour)

 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