【问题标题】:Error handling for rundll32 printui PrintUIEntryrundll32 printui PrintUIEntry 的错误处理
【发布时间】:2013-09-05 04:26:30
【问题描述】:

我正在编写一个脚本,它将网络打印机设置为分配给计算机的全局打印机,因此当新用户登录时,他们不必手动添加打印机,它已经存在。我正在使用命令 rundll32 printui PrintUIEntry。因此,我们将让技术人员到每台计算机(作为计算机上的管理员)运行此脚本。将出现一个弹出框,他们将输入打印机名称,就可以了,它运行 rundll32 命令。我们有 2 台打印机服务器“vps01”和“vps02”,因此该命令将运行两次以查找打印机。我在错误处理方面遇到问题。我不知道从哪里开始。我尝试设置错误处理,但我知道这是错误的。我拥有它的方式命令运行,但如果我输入无效的打印机名称,它仍然说打印机已添加。非常感谢任何帮助。

    Dim objNet, strPrinter
    Set objNet = CreateObject("Wscript.Network")
    strPrinter = InputBox("Please enter the name of the Printer you'd like to add", "Add Printer", "eg. printer name")
    Set objShell = CreateObject("WScript.Shell")
    arrServers = Array("vps01","vps02")
    For Each strServer In arrServers
        strCommand = "cmd /c rundll32 printui.dll,PrintUIEntry /ga /n\\" & strServer & "\" & strPrinter
        objShell.Run strCommand, 1, True
    next
    If err.number = 0 Then
    Wscript.Echo strPrinter & " added!"
    Else
    Wscript.Echo "Uh oh - there seems to be a problem! Error Code : " & err.number & " Error Description: " & err.description
    End If

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    Err.Number 只会显示来自代码或 COM 组件的错误,但看起来您正在尝试运行命令然后读取输出。

    我认为您可以采取几种方法:

    1. 如果您存储来自objShell.Run 的返回值(类似于result = objShell.Run(strCommand, 1, True),那么您可以查看命令是否返回成功。我不确定您是否总是会成功,因为您的命令'重新运行是cmd,它可能会成功运行您告诉它的命令。您可以直接运行rundll32,而不是通过cmd 运行它。 更新:这对你没有帮助。虽然 cmd 将传递来自 rundll32 的返回码,但它始终为 0,因为 rundll32 函数总是返回 void。
    2. 您可以使用.Exec 而不是使用.Run 方法,它允许您访问输出流。您可以解析它以获取您正在寻找的成功和失败消息。
    3. 不要调用命令行来运行命令,而是使用 WMI 或其他一些对象模型来添加打印机。 (也许调用AddWindowsPrinterConnection 的登录脚本足以满足您的需要,而不是系统网络打印机连接?)这可能比它的价值更麻烦,特别是如果您还不熟悉 WMI 的快速安装脚本,但它可能是更正确的做事方式,它可以让您以更直接的方式处理任何错误,可能是通过使用看起来像您正在尝试做的 Err.Number 技术。

    【讨论】:

    • cmd 实例将返回它正在运行的命令的退出代码。
    • 谢谢。我想我本可以自己测试它,但感觉不到它。但是由于 rundll32 入口点返回 void,所以无论如何这里也无济于事。我将编辑我的答案以反映这一点……
    • @PeterCooperJr.:更糟糕的是,我听说PrintUIEntry 将错误报告为弹出窗口,而不是在输出流中,所以我认为 #2 也不起作用。从我所见,每个人都只是检查注册表或其他东西,看看打印机是否在那里。如果是,则成功,否则错误。
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多