【问题标题】:Best way to set a local printer as default in C#在 C# 中将本地打印机设置为默认值的最佳方法
【发布时间】:2013-10-23 20:49:19
【问题描述】:

我想在 C# 中将本地打印机设置为默认值

我在 Google 搜索中找到了两种方法:

  1. 使用 IWshRuntimeLibrary 和 IWshNetwork_Class
  2. [DllImport("Winspool.drv")] private static extern bool SetDefaultPrinter(string printerName);

我在http://social.msdn.microsoft.com/Forums/vstudio/en-US/1ed0f29a-a5ff-4328-9c0f-f431f75fccbc/set-defualt-printer?forum=vbgeneral找到了#1 VB

它的 C# 代码:

new IWshRuntimeLibrary.IWshNetwork_Class().SetDefaultPrinter(printerName)

所以,#1 是一个 COM 互操作调用。 #2 是一个简单的 dll 调用。

我都试过了,都可以正常工作。那么,我应该使用哪个?我需要为#1 安装一个单独的库(在客户端的机器上)吗?

【问题讨论】:

  • 我已经定义了dllimport,就在没有try and catch的类下。那么,如果出现异常,如果dllimport的调用函数由于某种原因失败,我可以在代码中调用定义的函数时在catch{}中捕获它吗?或者整个程序会崩溃?

标签: c# .net printing dllimport


【解决方案1】:

我会选择直接 DLL 调用。我敢打赌IWshRuntimeLibrary 在内部调用Winspool.drv,然后您将COM 层排除在外。 Windows 机器似乎不太可能没有正确注册 Windows Scripting Host,但Winspool.drv 不可用的可能性似乎更小。

【讨论】:

  • 我已经定义了dllimport,就在没有try and catch的类下。那么,如果出现异常,如果dllimport的调用函数由于某种原因失败,我可以在代码中调用定义的函数时在catch{}中捕获它吗?或者整个程序会崩溃?
  • 您不能将属性包装在 try/catch 中,但如果缺少 DLL,您将在 调用 函数时得到 DllNotFoundException。请注意,.NET 运行时无法捕获某些非托管异常,并且可能会中止进程。
【解决方案2】:

我认为 .NET 以托管解决方案的形式提供了您正在寻找的东西。尝试查看LocalPrintServer class,特别是DefaultPrintQueue property。这是一些example code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多