2012-02-14 5 views
1

Я новичок в WPF, и у меня есть эта проблема с печатью. Я использую следующий код:WPF не будет печатать большую часть времени

public static void PrintImageFile(string ImagePath, int ImageCopyCount, PageOrientation ImagePageOrientation = PageOrientation.Unknown, PrintQueue Printer = null, string PrintingName = "") 
    {    
     PrintDialog printDialog = SetPrintDialog(ImageCopyCount, ImagePageOrientation, Printer); 
     BitmapImage imageToPrint = BitmapImageFromPath(ImagePath); 
     PrintCapabilities capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket); 
     Size size = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight); 
     DrawingVisual drawingVisualToPrint = BitmapImageToDrawingVisual(imageToPrint, size); 

     try 
     { 
      printDialog.PrintVisual(drawingVisualToPrint, PrintingName); 
     } 
     catch (Exception e) 
     { 
      Info("Error in PrintImageFile : " + e.Message); 
     } 
    } 

Проблема в том, что он не будет печатать большую часть времени. В этих случаях задание на печать кратко отображается в списке заданий печати принтера, а затем исчезает. Никакого сообщения об ошибке нет, и программа ведет себя так, как если бы PrintVisual никогда не выполнялся. Около 1 из 6-7 раз, однако, печать происходит точно так, как ожидалось ...

Принтер отлично работает.

Я потратил много времени, пытаясь понять это, и я не видел никого, имеющего такую ​​же проблему. Спасибо.

+1

Вы уверены, что есть содержимое в чертежеVisualToPrint? Это досягаемость, но очередь печати может определять, что в задании печати ничего не происходит, поэтому он падает,/ – Paparazzi

+0

drawingVisualToPrint имеет контент, это не проблема. – user1209585

ответ

0

Я нашел причину такого поведения.

Это вызвано манифестом, используемым программой для автоматического выполнения в качестве администратора. Не помню, где я получил его от, но здесь это:

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 

     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 

    </application> 
    </compatibility> 
</asmv1:assembly> 

Я уверен, что это то, что вызывает это, я сделал различные проекты испытаний. Как только я удаляю манифест в свойствах проекта (в разделе «Приложение»), печать выполняется, как ожидалось.

По-прежнему необходимо выполнить программу как администратор.

Любой, у кого есть опыт в этом вопросе?

(Я запускаю отладчик под окнами 7)

Смежные вопросы