Ik heb een applicatie die via GnuPG data moet decrypteren. Hiervoor start ik een gpg process:
En schrijf ik vervolgens een stream naar StandardInput:
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?
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."