我正在将我从Linux编写的一小段代码移植到Windows,基本上我需要将ZPL代码推送到通过USB连接的斑马打印机上。 Linux中的shell_exec和lp没问题。
在Windows上,我将USB打印机映射到LPT1,在这里没有问题,如果我将代码(或复制文件)回显到LPT1(以cmd为单位),则一切正常。喜欢:
copy C:\zplcode.txt LPT1 *or* echo "zplcode here" > LPT1
我的东西被打印了。
现在,就像我说的那样,此命令在cmd中可以正常工作,但是如果我执行shell_exec,则无法正常工作。我以为shell_exec根本不起作用,但确实可以。实际上,
echo shell_exec('ver')
返回我的Windows版本。而copy C:\zplcode.txt LPT1
在cmd中返回“已复制1个文件”,而echo shell_exec('copy c:\zplcode.txt LPT1')
返回“已复制0个文件”。如果我尝试复制任何普通文件或向它们回显,也会发生这种情况。就像apache没有写权限之类,还是不像在linux上有自己的用户,它是作为系统运行的服务...您能帮上忙吗?谢谢
edit2:我通过禁用UAC并强制apache服务以管理员身份运行,然后执行
shell_exec("echo zplcode here > ///localhost//printer")
来解决我的问题,其中printer是共享打印机时分配给我的打印机的名称。我猜问题仍然存在,因为如果需要的话,我无法将数据推送到LPT1(除非共享数据并执行此处的操作)。 最佳答案
您说您“将USB打印机映射到LPT1”;这样的映射对于用户的登录 session (或者不确定,对于远程桌面 session )而言是本地的。
无论哪种方式,即使配置为在同一用户帐户下运行,服务也不会看到它。每个服务都有一个单独的登录 session ,从Windows Vista开始,为only services run in Remote Desktop session 0。