2016-04-27 6 views
0

Ich habe versucht, ein Dokument zum Drucken auf einem Windows 8.1-Computer mit der folgenden Konsolenanwendung zu erhalten;C# Konsolenanwendung druckt nicht in Windows 8.1

using System; 
using System.IO; 
using System.Printing; 

namespace BasicPrinter 
{ 
class Program 
{ 
    private static void Main(string[] args) 
    { 
     var server = new LocalPrintServer(); 

     Console.WriteLine("Default printer:{0}", server.DefaultPrintQueue.Name); 
     Console.WriteLine("Default spool directory:{0}",server.DefaultSpoolDirectory); 

     var printQueue = server.DefaultPrintQueue; 

     Console.WriteLine(printQueue.Name); 

     Console.ReadLine(); 

     var bytes = File.ReadAllBytes("c:/Printing/Test2.pdf"); 

     var job = printQueue.AddJob(); 

     job.JobStream.Write(bytes, 0, bytes.Length); 
     job.JobStream.Close(); 
     job.JobStream.Dispose(); 
     job.Dispose(); 
    } 
    } 
} 

ich auf einem Windows-7-Maschine entwickle Visual Studio 2013. Wenn ich diese Anwendung auf meinem Rechner laufen sie das Dokument druckt, wie erwartet. Ich remote dann in den Windows 8.1 Rechner, kopiere den Inhalt der bin Datei von meinem Windows 7 Rechner (zusammen mit der test2 pdf Datei) und führe es von dort erneut aus.

Die Anwendung läuft, ich sehe den Namen des Druckers, wenn ich den Drucker im Gerätemanager sehe ich sehe, dass es Spoolen ist, aber dann anstelle des Drucks löscht einfach den Job.

Ich habe überprüft, dass ich "Any CPU" targeting, beide Maschinen sind x64.

Warum funktioniert das nicht auf dem Windows 8.1-Rechner?

Es ist die einzige 8.1 Maschine, auf die ich zugreifen kann.

+0

Haben Sie versucht, den Code auf der anderen Maschine neu zu kompilieren? Nur ein Gedanke. – Rariolu

+0

Es ist eine gute Idee, und nein, ich habe es nicht versucht. Der andere Computer verfügt nicht über Visual Studio und ich habe keine Möglichkeit, es zu installieren. –

+0

versuchen Sie still zu drucken? ohne printdialog anzuzeigen? –

Antwort

0

Windows 8.1 verwendet v4-Druckertreiber. Sie verlangen, dass die Datei, die den Jobstrom ein .xps sein, hinzugefügt wird, wenn Sie nicht eine bekommen 0 byte spool file

I Wort verwendet, um eine XPS-Datei zu erstellen genannt Test3.xps dann

ersetzt
var bytes = File.ReadAllBytes("c:/Printing/Test2.pdf"); 

mit

var bytes = File.ReadAllBytes("c:/Printing/Test3.xps"); 

Dies gedruckt.