我将从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
返回" 1个文件被复制"在cmd中,echo shell_exec('copy c:\zplcode.txt LPT1')
返回" 0个文件被复制"。如果我尝试复制任何普通文件或回显它们,也会发生这种情况。
就像apache没有写权限或者其他东西一样,它仍然不像linux上有自己的用户,它是作为系统运行的服务......你能帮我吗?感谢
edit2:我通过禁用UAC并强制apache服务以管理员身份运行来解决我的问题,然后执行shell_exec("echo zplcode here > ///localhost//printer")
,其中printer是我在共享时分配给我的打印机的名称。我想问题仍然存在,因为如果我需要的话,我无法将数据推送到LPT1(除非分享并做我在这里做的事情)。
答案 0 :(得分:1)
你说你“将USB打印机映射到LPT1”;这样的映射是用户登录会话的本地(或者可能是远程桌面会话,我不确定)。
即使配置为在同一用户帐户下运行,服务也不会看到它。每个服务都有一个单独的登录会话,从Windows Vista开始,only services run in Remote Desktop session 0。