Windows Printer Installer
=========================

WPI 是一个使用 Python 3 编写，在 Windows 下使用的，安装非本地打印机 （包括驱动，端口） 的工具。

如果你想运行一下程序就自动安装好多个 *共享的* 打印机或 *TCPIP* 打印机，这个程序就是你要找的。


通过 Resilio Sync (原 BitTorrent Sync)  直接获取独立程序
=============================================

如果你只想获取独立的程序，那么需使用 Resilio Sync 同步以生成好的程序。

Resilio Sync 下载地址：

https://www.resilio.com/platforms/desktop/

同步密钥：

BQ5LNWA34LIG3ETZMJ73ZEGMBW4P2WX24


通过 Python 模块方式安装
================

先安装 `Python 3 <https://www.python.org/downloads/windows/>`_ (建议选择的 32位 3.4 版)，安装时注意勾选 pip 组件。

然后手动下载安装相应版本的 `pywin32 <https://sourceforge.net/projects/pywin32/files/pywin32/>`_

再以管理员管理员权限运行：
::

    pip install wpi


完成安装后，wpi 应该就可以直接在命令行下运行了。

注：为了解压在压缩包里的驱动，应当下载安装 `7-Zip <http://www.7-zip.org/download.html>`_ ，
如果想把 wpi 打包成可以多系统下执行的独立程序，应当安装32位的 7-Zip

生成独立的程序
-------

如果想在没有 Python 环境的系统下运行，得把 Python 环境和 wpi 及其依赖的模块打包在一起。
先安装 Pyinstaller：
::

    pip install pyinstaller


然后运行 wpi 的打包命令:
::

   wpi2exe


这样会生成独立的 exe 文件， wpi2exe 使用 *LOCALAPPDATA%\\wpi2exe\\config.py* 作为配置文件，如果此文件不存在，*wpi2exe* 会自动创建它。
可以编辑它以设置输出目录等。正如后缀名所示，此配置文件是一个 Python 脚本。


参数用法
====
命令行参数的定义类似 Python 函数。

具名参数运行例子:
::

    wpi ps=my_printers.py drivers=my_drivers_dir


参数 ps
-----
*ps* 用来指定一个已定义了打印机列表的文件。


参数 drivers
----------
*drivers* 用来指定驱动程序的总目录。


不提供参数时程序运行的方式
-------------
当没有提供 *ps* 时，程序会使用 *默认资源目录* 下的 *ps.py* 文件作为默认打印机列表文件以直接安装打印机， 如果不存在则会进入 *交互模式*。

当没有提供 *drivers* 时，程序会使用 *默认资源目录* 下的 *drivers* 目录作为默认参数。


默认资源目录在哪？
---------

以独立程序运行时，默认资源目录既是程序所在的目录。

以模块脚本方式运行程序时，默认资源目录是 *%LOCALAPPDATA%\\wpi* 。

%LOCALAPPDATA% 在哪？
``````````````````
它是一个环境变量，如果你的账户名是 *韩梅梅*，而且系统是 Windows 7 的话，
那么 *%LOCALAPPDATA%* 可能就是： *C:\\Users\\韩梅梅\\AppData\\Local\\*


交互式界面的用法
========
提示输入时，可以直接输入 ps 文件的路径，或输入 m/l 命令（见下面的作用说明），退出时用 q 命令。

m 命令
----

1. 创建样例打印机列表文件
``````````````
会在 *默认资源目录* 里创建名为 *_ps.py* 的样例打印机列表文件以作为编写打印机列表文件时的参考。

2. 创建供存放打印机驱动的目录结构
``````````````````
会在 *默认资源目录* 里创建名为 *drivers* 的目录和以 *系统位数*，*发行版本* 为名的子目录。

你应该把驱动程序包根据适用情况，放在合适的目录里。

驱动程序包裹可放置在特定的发行版本目录下，也可放置在上一级，这样就表示这个驱动可用于多系统。

下载的驱动文件只要是 7-Zip 可以解包（解压）的文件就无需手动解包。程序会自动寻找包裹里的 inf 文件并比较在打印机列表文件里给定的驱动名，符合就会使用此包裹里的这个 inf 文件。
包裹里的 inf 文件只能在第一级包裹里，举个反例: 把 inf 打包为包裹1，然后把包裹1再打包成包裹2。这样的情况下程序就找不到 inf 文件了，因为包裹2的文件列表里无 inf 文件！

l 命令
----
列出 包裹文件里的inf文件 或 inf文件里 的驱动名。