嘿伙计们,这个问题不能太复杂.请提供一个解决方案,至少找出问题的根本原因.我目前正在编写一个应用程序,它通过COM控制Excel:该应用程序创建一个基于COM的Excel实例,打开一些XLS文件并读取其内容.情景一在Windows...

嘿伙计们,这个问题不能太复杂.请提供一个解决方案,至少找出问题的根本原因.
我目前正在编写一个应用程序,它通过COM控制Excel:该应用程序创建一个基于COM的Excel实例,打开一些XLS文件并读取其内容.
情景一
在Windows 7上,我使用具有系统管理员权限的xmapp-control启动Apache和mySQL.一切都按预期工作.基于PHP的控制器脚本按预期与Excel交互.
情景二
如果我将Apache和mySQL作为“后台作业”启动,则会出现问题.方法如下:
>我使用Windows 7 Task Planner创建了两个作业.一个运行apache_start.bat,另一个运行mysql_start.bat.
>在Windows 7启动时,这两个任务都以SYSTEM的身份运行.
Apache和mySQL按预期工作.具体来说,Apache提供来自客户端的HTTP请求,PHP可以与mySQL通信.
当我调用PHP控制器,它使用COM调用并与Excel交互时,我收到一个错误.
错误消息来自Excel [不是COM本身],如下所示:
> Excel无法读取指定的Excel文件
>由于名称不正确的工作表,Excel无法保存文件
有趣的是,第一次运行基于PHP的控制器脚本时,首先需要几秒钟来呈现错误消息.每次后续运行都会立即呈现错误消息.
Windows系统日志未显示单个问题报告条目.
注意,PHP程序和Apache实例没有改变 – 除了Apache的启动方式.
至少PHP控制器脚本完全能够读取文件系统,因为它通过某个目录的scandir()为XLS文件提供了pathes.
并发问题不能成为问题的原因.特定PHP控制器的单个实例与Excel交互.
题
有人可以提供详情,为什么会这样?或者提供隔离问题的最终原因的方法(例如,通过PowerShell 2脚本)?
UPDATE-1 :: 2011-11-29
正如提议的那样,我将Task Planner工作从SYSTEM切换到传统用户.作品. Apache和MySQL启动并处理请求.
不幸的是,关于Excel的情况并没有改变.不过,我看到了错误.
如前所述,EXCEL COM服务器启动.我可以通过COM实例更改各种设置(例如,禁止对话框)而不会出现问题.
调用此问题时会发生此问题:
$excelComObject->Workbooks->Open( 'PathToXLSFile' );
UPDATE-2 :: 2011-11-30
使用READABLE权限将帐户USER,GUEST和EVERYONE添加到XLS文件的访问控制列表中.没变.
以这种方式修改了应用程序,PHP部分将XLS文件的副本创建为临时文件,并将原始文件的内容移动到此文件中.只是为了确保问题不是由奇数文件/路径名强制的.
但问题仍然存在.
UPDATE-2 :: 2011-12-05
我将以这种方式发送EXCEL COM-Server方法,Excel创建一个空白文件并将其保存到/ tmp.让我们看看,如果Excel甚至无法读取此文件.
解决方法:
在过去(阅读:Vista之前)服务有一个名为“允许服务与桌面交互”的选项,允许服务产生窗口等.启动Vista,这是不再允许的.
我怀疑Excel失败了,因为它无法在此限制下运行.因此,在Win7安装中将其作为服务运行的任何尝试都将失败.
您可以使用Windows XP并允许Apache进程进行桌面交互,出于显而易见的原因我不建议这样做.
我将采用的另一种方法是创建一个PHP脚本,该脚本作为常规进程运行并在无限循环中侦听套接字.在Apache下运行的PHP脚本将通过本地套接字与辅助脚本通信,并使辅助脚本生成Excel.
这可能听起来很复杂,但事实上它并不是很多代码,它解决了你很快就会遇到的问题:你应该只运行一个Excel实例,否则你可能会遇到问题.辅助脚本可以对请求进行排队,逐个切换到Excel,然后在队列中取下一个.
本文标题为:当Apache通过Task Planner启动时,在Windows 7上从PHP 5调用Excel到COM失败


基础教程推荐
- Centos7 nginx的安装以及开机自启动的设置 2023-09-22
- P3 利用Vulnhub复现漏洞 - Apache SSI 远程命令执行漏洞 2023-09-10
- Apache CarbonData 1.0.0发布及其新特性介绍 2023-09-11
- 通过StatefulSet部署有状态服务应用实现方式 2022-10-01
- RFO SIG之openEuler AWS AMI 制作详解 2022-12-28
- Docker容器操作方法详解 2022-11-13
- Centos 安装Django2.1 2023-09-24
- windows环境下apache-apollo服务器搭建 2023-09-10
- 为Win2003服务器打造铜墙铁壁的方法步骤 2022-09-01
- Apache Kafka 2.5 稳定版发布,新特性抢先看 2023-09-11