在 Windows 7 中隐藏打印机但能够通过编程进行打印

在 Windows 7 中隐藏打印机但能够通过编程进行打印

我想在 Windows 7 上使用以下方法实现以下要求客人帐户

  1. 用户将无法查看/选择使用特定打印机进行打印时,例如:Microsoft Word、Adobe Reader 等。
  2. 然而,用户允许打印使用我自己开发的应用程序来与隐藏的打印机通信。(这意味着应用程序本身将能够将数据发送到隐藏的打印机进行打印)

我正在考虑的一个方法是禁用“打印”权限针对该访客帐户。打印机将对用户隐藏,但不允许用户打印。

请问有什么方法可以实现这个吗?通过编程或配置都可以。

答案1

允许打印机从选定的应用程序打印可能有点棘手。Windows 中没有这样的机制,但你可以以某种方式解决这个问题。我有一些龌龊的想法,你可以多思考一下,也许你会找到更好或更简单的方法。

您可以管理打印机权限,包括 Windows 中的本地打印机(自 Windows 2000 起)。

一、阻止访客的打印权限(或客人组或其他应该使用您的程序的用户) - 禁用该帐户/组的正常打印。

  1. 转到打印机中的设备(在控制面板中)
  2. 右键单击打印机并选择“打印机属性”(而不仅仅是“属性”!)
  3. 应该有“安全”选项卡。您可以管理帐户和组的权限。
  4. 为您的访客帐户(或访客组,由您决定)配置权限。

II. 准备系统和应用程序以作为其他用户进行打印

  1. 添加其他 Windows 帐户并允许其打印。您可能希望禁用其正常登录(我认为将该用户从用户组中删除将阻止该用户出现在登录屏幕上)。

  2. 共享您的打印机(通常如网络)

  3. 在您的应用程序中 - 使用适合您的编程语言的函数来执行命令行命令。对于 .NET,可以是 System.Diagnostics.Process.Start(string Command),在 Python 中可以是 os.system(cmd) 等。

    网络使用 \\localhost\printer_share_name /u:nonguestaccountname nonguestaccountpassowrd”

    这会将您的打印机映射为其他用户(希望是立即),通过使用nonguestaccountname帐户权限进行打印(打印将以我们之前创建的其他用户的身份完成)。

  4. 您可能需要等到打印机映射完成后才能尝试打印、进行一些错误处理等。
  5. 在应用程序中处理您的打印
  6. 执行:

    网络使用 \\localhost\printer_share_name /delete

    这将取消映射您的打印机(希望是立即取消)。

整个过程应该花费不到一秒钟的时间 - 虽然那时用户可以从任何应用程序进行打印,但有一个我的想法有漏洞但是普通用户可能不会弄清楚发生了什么,这应该足以节省公司里的纸张/墨水/碳粉或类似的东西:)

使用网络打印机 - 可能不可靠,速度慢,并且可能取决于 LAN 网络质量/负载,但如果您将本地打印机映射为网络打印机 - 它应该运行得非常快。

正如我之前所写 - 这是一种非常肮脏的方法,但除了以其他用户身份临时映射打印机之外,我没有找到其他方法。这不是 100% 可靠和安全的,但出于某些目的您可以使用它。

我上面写的所有内容都可以使用应用程序安装程序中的 CMD 或 VBS 脚本自动执行。

另一种方法可以执行共享/取消共享打印机,但无论如何您都需要额外的 Windows 帐户。

额外提示:

从命令行共享打印机

(如果您使用的不是英文版 Windows,请将路径中的 en-US 替换为您的语言环境)

编辑:

您可能需要在 Vista Basic 和 XP Home 版本上进行测试,它们可能具有简化的权限控制界面并且一些功能被隐藏(我记得一些简化的 Windows 版本没有“安全”选项卡或类似的东西)。

相关内容