C# 在C语言中将本地打印机设置为默认打印机的最佳方法#

C# 在C语言中将本地打印机设置为默认打印机的最佳方法#,c#,.net,printing,dllimport,C#,.net,Printing,Dllimport,我想在C语言中将本地打印机设置为默认打印机# 我在谷歌搜索中找到了两种方法: 使用IWShurantimeLibrary和IWSHU网络类 [DllImport(“Winspool.drv”)] 私有静态外部bool SetDefaultPrinter(字符串printerName) 我在VB上找到了#1 其C#代码: 所以,#1是一个COM互操作调用#2是一个简单的dll调用 我试过了,两种都很好。那么,我应该使用哪一种?我是否需要为#1安装单独的库(在客户机上)?我会选择直接DLL调用。我敢

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

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

  • 使用IWShurantimeLibrary和IWSHU网络类
  • [DllImport(“Winspool.drv”)] 私有静态外部bool SetDefaultPrinter(字符串printerName) 我在VB上找到了#1

    其C#代码:

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


    我试过了,两种都很好。那么,我应该使用哪一种?我是否需要为#1安装单独的库(在客户机上)?

    我会选择直接DLL调用。我敢打赌,
    IWshRuntimeLibrary
    会在内部调用
    Winspool.drv
    ,这样您就不需要COM层了。windows计算机似乎不太可能没有正确注册windows脚本主机,但Winspool.drv不可用的可能性更小。

    我认为.NET以托管解决方案的形式满足了您的需求。尝试查看,特别是。这里有一些我定义的dllimport,就在类下,没有尝试和捕捉。因此,在异常的情况下,如果被调用的dllimport函数由于某种原因失败,那么在代码中调用定义的函数时,我可以在catch{}中捕获它吗?或者整个程序将崩溃?您不能在try/catch中包装属性,但是如果DLL丢失,则在调用函数时会出现
    DllNotFoundException
    。请注意,.NET运行时无法捕获某些非托管异常,可能会中止该进程。我已在没有try and catch的类下定义了dllimport。因此,在异常的情况下,如果被调用的dllimport函数由于某种原因失败,那么在代码中调用定义的函数时,我可以在catch{}中捕获它吗?否则整个程序就会崩溃?
    new IWshRuntimeLibrary.IWshNetwork_Class().SetDefaultPrinter(printerName)