ich bin gerade eben auf einen ... ich würde es Bug nennen ... in VB.NET gestoßen.
Folgendes ist mein Ziel:
Ein Converter, der eine Datei nimmt, entsprechend konvertiert, mit einem öffentlichen Schlüssel eine Signaturdatei aus der umgewandelten Datei generiert und dann diese beiden Dateien auf einen FTP schiebt.
Soweit klappt das auch alles.
Meine Form enthält zwei Textboxen:
txt_pfad und
txt_ziel
Für txt_pfad wird mit dem OpenFileDialog die Orginaldatei gewählt und in die Box geschrieben.
Für txt_ziel wird mit FolderBrowserDialog lediglich der Ort bekannt gegeben, wo die umgewandelte Datei gespeichert werden soll, bevor sie auf den FTP geschoben wird.
Folgendes Problem tritt nun auf:
Sobald ich die Konvertierung starte, müsste danach eine Shell aufgehen und mich nach dem PublicKey für die Signaturdatei fragen. Die Shell geht zwar auf, aber auch mit der gleichen Geschwindigkeit wieder zu, weshalb ich die Fehlermeldung nicht lesen kann.
Das passiert, wenn ich die Orginaldatei mithilfe des OpenFileDialogs wähle.
Wenn ich den Pfad der Datei allerdings einfach so in die txt_pfad reinschreibe, funktioniert die ganze Sache reibungslos. Die Shell geht auf und wartet brav auf meine Eingabe.
Übrigens reagiert die zweite Shell für den FTP Upload genauso.
Wenn ich im OpenFileDialog keine Datei wähle sondern auf Abbrechen klicke und dann frei Hand den Code eingeben funktioniert es auch. Aber sobald ich im Dialog auf OK klicke und danach den Pfad eintrage habe ich wieder oben genannten Fehler.
Hier mal etwas Code um sich das besser vorstellen zu können:
Hier der Aufruf des OpenFileDialog
Private Sub cmd_open_file_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_open_file.Click
OpenFileDialog1.ShowDialog()
txt_pfad.Text = OpenFileDialog1.FileName
End Sub
Der Shell-Aufruf zum verschlüsseln der konvertierten Datei
Function write_sig(ByVal path As String, ByVal sig_extension As String)
'Signaturdatei wird geschrieben
Shell("openssl.exe dgst -md5 -binary -out " & path & sig_extension & " -sign elster.pem " & path, AppWinStyle.NormalFocus, True)
Return True
End Function
Der Aufruf der Funktion write_sig die sich in dem Objekt crypt befindet
crypt.write_sig(txt_ziel.Text & filename, ".sig")
Der neue Dateiname wird aus der Orginaldatei generiert
filename = strFunc.make_filename(txt_pfad.Text.Substring(txt_
pfad.Text.LastIndexOf("\") + 1), "zm", "bz100000000", "b01", "l01", "01", "q", "ca", "mgt")
Und hier die entsprechende Funktion
Function make_filename(ByVal filename As String, Optional ByVal pb As String = "zm", Optional ByVal bzstnr As String = "bz100000000", Optional ByVal processID As String = "b01", Optional ByVal distributorID As String = "l01", Optional ByVal version As String = "v01", Optional ByVal sequence As String = "q", Optional ByVal codepage As String = "ca", Optional ByVal extension As String = "mgp")
Dim datum As String
Dim position As Integer
position = filename.LastIndexOf(" ", filename.LastIndexOf(" ") - 1)
datum = filename.Substring(position, filename.LastIndexOf(".") - position)
get_path_date(datum)
Return "m5_" & pb & "_" & bzstnr & "_" & processID & distributorID & "_v" & version & "_z" & datum & "_" & sequence & Now.Year.ToString.Substring(2) & get_act_days() & "_" & codepage & "." & extension
End Function
Function get_path_date(ByRef datum As String)
Dim month As String
Dim year As String
datum = datum.Trim
month = datum.Substring(0, datum.IndexOf(" "))
year = datum.Substring(datum.IndexOf(" "))
month = month.Trim
datum = year.Trim
Select Case month
Case 1
datum = datum & "0101"
Case 4
datum = datum & "0401"
Case 7
datum = datum & "0701"
Case 10
datum = datum & "1001"
End Select
Return True
End Function
Hat irgendjemand eine Idee, was ich hier machen könnte?
Bzw. weiß jemand wie ich in VB.NET das Shell-Fenster offen halten kann, obwohl die Verarbeitung schon erledigt ist, damit ich zumindest die Fehlermeldung sehen kann?
Ich bin dankbar für jeden Tipp
Gruß divus
Dieser Beitrag wurde von divus bearbeitet: 29. Mai 2008 - 10:31

Hilfe
Neues Thema
Antworten

Nach oben

