首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PHP 5通过COM调用Excel在Windows 7上失败当Apache通过任务计划器启动时

从PHP 5通过COM调用Excel在Windows 7上失败当Apache通过任务计划器启动时
EN

Stack Overflow用户
提问于 2011-11-25 22:38:09
回答 3查看 978关注 0票数 5

嘿,伙计们,这个问题不会太复杂。请提供一个解决方案,至少找出问题的最终根源。

我目前正在编写一个应用程序,通过COM控制Excel :该应用程序创建一个基于COM的实例,打开一些XLS文件并读取它们的内容。

场景I

在Windows7上,我使用带有系统管理员权限的mySQL xmapp控件启动Apache和。一切正常工作。基于PHP的控制器脚本与Excel进行预期的交互。

场景II

如果我将Apache和mySQL作为“后台作业”启动,就会出现一个问题。以下是如何:

  • I使用Windows 7任务计划器创建了两个作业。一个运行apache_start.bat,另一个运行任务,在Windows7启动时以提升的权限运行.

Apache和mySQL按预期工作,特别是服务来自客户端的HTTP请求,并且能够与mySQL对话。

当我调用PHP控制器(它使用COM调用Excel并与之交互)时,我确实会收到一个错误。

错误消息来自Excel而不是COM本身,其内容如下:

Excel-file

  • Excel
  • Excel无法读取指定的

,无法保存该文件。

有趣的是,在第一次运行基于PHP的控制器脚本期间,呈现错误消息需要几秒钟时间。每次后续运行都会立即呈现错误消息。

Windows系统日志没有显示一个问题报告条目。

请注意,Apache程序和实例没有改变--除了启动的方式。

至少,PHP控制器脚本完全能够读取文件系统,因为它通过某个目录的scandir()为XLS-文件提供路径。

并发问题不可能是问题的原因。特定PHP控制器的单个实例与Excel交互。

问题

有人能提供细节吗?为什么会发生这种事?或者提供方法来隔离问题的最终原因(例如,通过PowerShell 2脚本)?

更新-1 ::2011-11-29

按照建议,我将任务计划器的作业从系统切换到了常规用户。很管用。Apache和MySQL启动并处理请求。

不幸的是,Excel的情况并没有发生任何变化。尽管如此,我还是看到了错误。

如前所述,EXCEL COM服务器将启动。我可以通过COM实例更改各种设置(例如,抑制对话框),而不会出现问题。

此问题发生在调用以下内容时:

代码语言:javascript
复制
$excelComObject->Workbooks->Open( 'PathToXLSFile' );

更新-2 ::2011-11-30

在XLS文件的访问控制列表中添加了具有可读性权限的帐户用户、来宾和每个人。没有变化。

修改应用程序时,part 会创建XLS文件的副本,作为临时文件,并将原始文件的内容移到这里。为了确保问题不是由奇数文件/路径名称所造成的。

,但问题仍然存在。

更新-2 ::2011-12-05

我将以这样的方式发送EXCEL COM-Server方法,即Excel创建一个空白文件并将其保存到/tmp中。让我们看看,如果Excel甚至不能读取这个文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-05 17:17:54

在过去(阅读: pre )服务有一个名为“允许服务与桌面交互”的选项,该选项允许服务生成窗口等。启动Vista时,不再允许这样做。

我怀疑Excel失败了,因为它不能在此限制下工作。因此,在Win7安装中将其作为服务运行的任何尝试都将失败。

您可以使用Windows并允许您的Apache进程进行桌面交互,由于明显的原因,我并不真正推荐这种操作。

另一种方法是创建一个PHP脚本,该脚本作为一个常规进程运行,并在无限循环中侦听套接字。在Apache下运行的PHP脚本将通过本地套接字与辅助脚本通信,并让辅助脚本生成Excel。

这听起来可能很复杂,但实际上它并不是很多代码,它解决了一个您很快就会遇到的问题:您应该只有一个Excel实例正在运行,否则您可能会遇到问题。辅助脚本可以将请求排队,一个接一个地交给Excel,然后接受队列中的下一个请求。

票数 0
EN

Stack Overflow用户

发布于 2011-11-28 19:26:25

进入任务计划器,让一切以本地用户的身份运行。这可能需要您输入密码,所以如果您还没有密码,就创建一个密码。

Excel是一个用户级别的应用程序,不应该作为系统运行。我肯定有办法解决这个问题,但你应该让一切都保持在正确的水平上。

在用户级别上运行Apache并不是问题。

票数 3
EN

Stack Overflow用户

发布于 2012-11-29 10:33:06

尝试创建以下目录:

代码语言:javascript
复制
C:\Windows\SysWOW64\Config\Systemprofile\Desktop

C:\Windows\System32\Config\Systemprofile\Desktop

它对我有用:-)

http://social.msdn.microsoft.com/Forums/en-US/innovateonoffice/thread/b81a3c4e-62db-488b-af06-44421818ef91

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8274830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档