需要对System.Printing.PrintQueue进行模拟以进行一些测试。目前,当我试图为可能存在的虚拟打印机(新的PrintQueue (新的PrintServer(),"Microsoft文档编写器“)创建PrintServer)时,我遇到了这个错误:
System.Printing.PrintQueueException: PrintTicket provider failed to bind to printer. Win32 error: -2147467231
at MS.Internal.Printing.Configuration.PTProvider..ctor(String deviceName, Int32 maxVersion, Int32 clientVersion)
at MS.Internal.Printing.Configuration.PTProviderBase.Create(String deviceName, Int32 maxVersion, Int32 clientVersion)
at System.Printing.PrintTicketManager..ctor(String deviceName, Int32 clientPrintSchemaVersion)
at System.Printing.PrintQueue.GetPrintCapabilities()注意,错误与缺少打印机无关。我可以使用赝品在堆栈顶部的PrintTicket,但它绝对不清楚是哪种方法抛出。PrintQueue不是托管类(驻留在PrintQueue.cpp中)。有什么想法吗?
编辑
谷歌搜索了一下,但还是没有找到解决这个问题的方法:https://connect.microsoft.com/VisualStudio/feedback/details/690455/printqueue-getprintcapabilities-throws-when-incorrect-driver-is-configured-for-printer-on-print-server http://www.infragistics.com/community/forums/t/50736.aspx http://petterisbetter.com/michael/index.php/2008/09/29/printticket-provider-failed-to-retrieve-
发布于 2014-09-05 08:51:42
解决这个问题需要提取和实现一些“部分”接口。
/// <summary>
/// Contract for PrintCapabilities
/// </summary>
public interface IPrintCapabilities
{
/// <summary>
/// Gets CollactionCapability.
/// </summary>
IEnumerable<Collation> CollationCapability { get; }
/// <summary>
/// Gets MaxCopyCount.
/// </summary>
int? MaxCopyCount { get; }
/// <summary>
/// Gets OrientedPageMediaHeight.
/// </summary>
double? OrientedPageMediaHeight { get; }
/// <summary>
/// Gets OrientedPageMediaWidth.
/// </summary>
double? OrientedPageMediaWidth { get; }
/// <summary>
/// Gets PageMediaSizeCapability.
/// </summary>
IEnumerable<PageMediaSize> PageMediaSizeCapability { get; }
/// <summary>
/// Gets PageOrientationCapability.
/// </summary>
IEnumerable<PageOrientation> PageOrientationCapability { get; }
/// <summary>
/// Gets DuplexingCapability.
/// </summary>
IEnumerable<Duplexing> DuplexingCapability { get; }
/// <summary>
/// Gets InputBinCapability.
/// </summary>
IEnumerable<InputBin> InputBinCapability { get; }
/// <summary>
/// Gets OutputColorCapability.
/// </summary>
IEnumerable<OutputColor> OutputColorCapability { get; }
/// <summary>
/// Gets PageOrderCapability.
/// </summary>
IEnumerable<PageOrder> PageOrderCapability { get; }
/// <summary>
/// Gets StaplingCapability.
/// </summary>
IEnumerable<Stapling> StaplingCapability { get; }
}
/// <summary>
/// Contract for PrintQueue
/// </summary>
public interface IPrintQueue
{
/// <summary>
/// Gets IsOffline flag.
/// </summary>
bool IsOffline { get; }
/// <summary>
/// Gets FullName.
/// </summary>
string FullName { get; }
/// <summary>
/// Refreshes PrintQueue.
/// </summary>
void Refresh();
/// <summary>
/// Gets or sets DefaultPrintTicket.
/// </summary>
IPrintTicket DefaultPrintTicket { get; set; }
/// <summary>
/// Gets PrintCapabilities.
/// </summary>
/// <returns></returns>
IPrintCapabilities GetPrintCapabilities();
}
/// <summary>
/// Contract for PrintQueueCollection.
/// </summary>
public interface IPrintQueueCollection : IEnumerable
{
}
/// <summary>
/// Interface that describes all classes implementing PrintServer operations.
/// </summary>
public interface IPrintServer
{
/// <summary>
/// Gets the collection of print queues of the specific types.
/// </summary>
/// <param name="enumerationFlag">Array of types of print queues.</param>
/// <returns>Print queues collection.</returns>
IPrintQueueCollection GetPrintQueues(EnumeratedPrintQueueTypes[] enumerationFlag);
/// <summary>
/// Returns a reference of default print queue of LocalPrintServer.
/// </summary>
/// <returns>Print queue.</returns>
IPrintQueue GetDefaultPrintQueue();
}
/// <summary>
/// Contract for PrintTicket
/// </summary>
public interface IPrintTicket
{
/// <summary>
/// Gets or sets PageOrientation.
/// </summary>
PageOrientation? PageOrientation { get; set; }
/// <summary>
/// Gets or sets Duplexing.
/// </summary>
Duplexing? Duplexing { get; set; }
/// <summary>
/// Gets or sets Stapling.
/// </summary>
Stapling? Stapling { get; set; }
/// <summary>
/// Gets or sets PageOrder.
/// </summary>
PageOrder? PageOrder { get; set; }
/// <summary>
/// Gets or sets OutputColor.
/// </summary>
OutputColor? OutputColor { get; set; }
/// <summary>
/// Gets or sets Collation.
/// </summary>
Collation? Collation { get; set; }
/// <summary>
/// Gets or sets PageMediaSize.
/// </summary>
PageMediaSize PageMediaSize { get; set; }
}https://stackoverflow.com/questions/24838538
复制相似问题