[C#] Schrijven naar Process.StandardInput

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik heb een applicatie die via GnuPG data moet decrypteren. Hiervoor start ik een gpg process:
C#:
1
2
3
4
5
6
7
8
Process gpg = new Process();
gpg.StartInfo.FileName = gnuPGPath;
gpg.StartInfo.Arguments = arguments;
gpg.StartInfo.CreateNoWindow = true;
gpg.StartInfo.UseShellExecute = false;
gpg.StartInfo.RedirectStandardInput = true;
gpg.StartInfo.RedirectStandardOutput = true;
gpg.StartInfo.RedirectStandardError = true;

En schrijf ik vervolgens een stream naar StandardInput:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void SetProcessInput(Process gpg, Stream input)
{
  byte[] buffer = new byte[1];
  int read;

  int i = 1;
  while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
  {
    Trace.WriteLine(i);
    gpg.StandardInput.BaseStream.Write(buffer, 0, read);
    i++;
  }

  gpg.StandardInput.Flush();
  gpg.StandardInput.Close();
}

Dit werkt perfect, totdat de input stream groter is dan ongeveer 28670 bytes. Dan blijft de boel hangen op het schrijven naar de StandardInput stream.

Ik heb de buffer grootte even op 1 gezet om te debuggen, dit vergroten helpt dus niet.
Ook als ik de data in een bestand opsla en het gewoon via cmd.exe doe (gpg.exe --decrypt <data) gaat het goed.

Waarom blijft hij hangen en wat kan ik hier aan doen?

[ Voor 10% gewijzigd door jelmervos op 06-11-2009 09:31 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ben er al achter: RedirectStandardOutput op True zetten zorgt voor een dead-lock. Ik schrijf/lees nu met aparte threads naar de input en output en dat gaat wel goed!

"The shell stopped unexpectedly and Explorer.exe was restarted."