2016-07-04 16 views
1

zurzeit zpl Datei an einen Drucker mit dieser Art und Weise schicke ich:Wie kann ich wissen, wenn der Druckvorgang mit dem Befehl copy zum Drucker localhost erfolgreich abgeschlossen wurde?

/C copy /B zplFile.zpl \\localhost\GX420d 

In C# verwende ich diesen Code:

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
startInfo.FileName = processName; //cmd 
startInfo.Arguments = string.Format(processArgument, "tmp.txt"); 
process.StartInfo = startInfo; 
process.Start(); 

Alles funktioniert gut, das Problem ist, dass ich nicht ein Handshake, um zu wissen, wann der Druckvorgang erfolgreich abgeschlossen wurde, z. B. wenn ich eine zpl-Datei sende und der Drucker keine Etiketten hat oder diskontiert ist, setzt das System, das den Befehl ausführt, voraus, dass der Druckvorgang erfolgreich abgeschlossen wurde.

Ich muss wissen, ob das Etikett erfolgreich gedruckt wurde.

HINWEIS1: Der Drucker ist ein GX420d mit einem USB-Kabel.

Irgendwelche Vorschläge?

Danke in fortgeschrittenem.

Schnitt:

Wenn Sie in dem Bild unten sehen, gibt es anstehende Aufträge zu drucken, na ja, vielleicht als workarround ich in dieser Liste kann mit C#, ist das möglich?

List of pending jobs

+0

Es gibt 2 Methoden zu überprüfen, zuerst überprüfen ReturnCode (0 ist Erfolg, sonst etwas falsch), oder die StandardOutput/StandardError zeigt etwas, wie ein Wort "Fehler in ....". –

+0

Meinst du das im C# -Code? Die process.Start() -Methode gibt einen wahren Wert zurück. –

+0

Ich meine, überprüfen Sie diese Eigenschaften: https://msdn.microsoft.com/en-us/library/system.diagnostics.process.exitcode(v=vs.110).aspx https://msdn.microsoft.com/ de-de/library/system.diagnostics.process.standardoutput (v = vs.110) .aspx https://msdn.microsoft.com/en-us/library/system.diagnostics.process.standarddror(v=vs.110).aspx –

Antwort

1

Nun, vielleicht diese workarround werden Werke.

http://www.codeproject.com/Articles/51085/Monitor-jobs-in-a-printer-queue-NET

Wenn euch eine bessere Möglichkeit, dieses Problem zu lösen, ich Ihre Kommentare zu schätzen wissen.

Nur für den Datensatz, ich suche in den Drucker-Jobs und zählen die ausstehenden Jobs, wenn es mehr als Null ist, nehme ich an, dass es fehlgeschlagen ist.

Die Schritte sind: 1.- ZPL-Datei an den Drucker senden. 2.- Verwenden Sie die System.Threading.Thread.Sleep, um eine bestimmte Zeit zu warten. 3.- In Drucker ausstehende Jobs suchen, wenn count> 0, dann wird es fehlschlagen, weil ich davon ausgehe, dass das Etikett nicht erfolgreich gedruckt wird.

Vielen Dank euch allen, dass ihr euch die Zeit genommen habt, Antworten zu geben. Wenn Sie eine bessere Lösung kennen, werde ich es schätzen, wenn Sie es kommentieren.

0

überprüfen diese, eine der Variablen kann, enthält Fehler:

var process = new Process(); 
var startInfo = new ProcessStartInfo(); 
startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
startInfo.FileName = processName; //cmd 
startInfo.Arguments = string.Format(processArgument, "tmp.txt"); 
startInfo.RedirectStandardOutput = true; 
startInfo.RedirectStandardError = true; 
startInfo.UseShellExecute = false; 
process.StartInfo = startInfo; 
process.Start(); 
string outputText = process.StandardOutput.ReadToEnd(); // Check this 
string errorText = process.StandardError.ReadToEnd(); // Check this 
int exitCode = process.ExitCode;      // Check this 
process.WaitForExit(); 
// In outputText is probably something here... 
// In errorText is probably something here... 
// In exitCode is probably something here... 
+0

Vielen Dank, Mann, aber zuvor habe ich es überprüft, dass Eigenschaften, und es gibt keinen Fehler, das ist, weil es wirklich keinen Fehler gibt, sendet der Code erfolgreich die ZPL-Datei. Das Problem liegt beim Drucker, weil er kein Papier hat oder nicht angeschlossen ist. –

0

Bitte schauen Sie auf dem Host-Abfrage ~ HQ ZPL-Befehl in der ZPL Manual.

Es ist keine perfekte Lösung, aber die Idee ist, dass Sie den Drucker vor oder nach dem Senden des ZPL zum Drucken abfragen können.

+0

Danke, ich werde mit diesem Befehl versuchen. –