嘿,伙计们,这个问题不会太复杂。请提供一个解决方案,至少找出问题的最终根源。
我目前正在编写一个应用程序,通过COM控制Excel :该应用程序创建一个基于COM的实例,打开一些XLS文件并读取它们的内容。
场景I
在Windows7上,我使用带有系统管理员权限的mySQL xmapp控件启动Apache和。一切正常工作。基于PHP的控制器脚本与Excel进行预期的交互。
场景II
如果我将Apache和mySQL作为“后台作业”启动,就会出现一个问题。以下是如何:
Apache和mySQL按预期工作,特别是服务来自客户端的HTTP请求,并且能够与mySQL对话。
当我调用PHP控制器(它使用COM调用Excel并与之交互)时,我确实会收到一个错误。
错误消息来自Excel而不是COM本身,其内容如下:
Excel-file
,无法保存该文件。
有趣的是,在第一次运行基于PHP的控制器脚本期间,呈现错误消息需要几秒钟时间。每次后续运行都会立即呈现错误消息。
Windows系统日志没有显示一个问题报告条目。
请注意,Apache程序和实例没有改变--除了启动的方式。
至少,PHP控制器脚本完全能够读取文件系统,因为它通过某个目录的scandir()为XLS-文件提供路径。
并发问题不可能是问题的原因。特定PHP控制器的单个实例与Excel交互。
问题
有人能提供细节吗?为什么会发生这种事?或者提供方法来隔离问题的最终原因(例如,通过PowerShell 2脚本)?
更新-1 ::2011-11-29
按照建议,我将任务计划器的作业从系统切换到了常规用户。很管用。Apache和MySQL启动并处理请求。
不幸的是,Excel的情况并没有发生任何变化。尽管如此,我还是看到了错误。
如前所述,EXCEL COM服务器将启动。我可以通过COM实例更改各种设置(例如,抑制对话框),而不会出现问题。
此问题发生在调用以下内容时:
$excelComObject->Workbooks->Open( 'PathToXLSFile' );更新-2 ::2011-11-30
在XLS文件的访问控制列表中添加了具有可读性权限的帐户用户、来宾和每个人。没有变化。
修改应用程序时,part 会创建XLS文件的副本,作为临时文件,并将原始文件的内容移到这里。为了确保问题不是由奇数文件/路径名称所造成的。
,但问题仍然存在。
更新-2 ::2011-12-05
我将以这样的方式发送EXCEL COM-Server方法,即Excel创建一个空白文件并将其保存到/tmp中。让我们看看,如果Excel甚至不能读取这个文件。
发布于 2011-12-05 17:17:54
在过去(阅读: pre )服务有一个名为“允许服务与桌面交互”的选项,该选项允许服务生成窗口等。启动Vista时,不再允许这样做。
我怀疑Excel失败了,因为它不能在此限制下工作。因此,在Win7安装中将其作为服务运行的任何尝试都将失败。
您可以使用Windows并允许您的Apache进程进行桌面交互,由于明显的原因,我并不真正推荐这种操作。
另一种方法是创建一个PHP脚本,该脚本作为一个常规进程运行,并在无限循环中侦听套接字。在Apache下运行的PHP脚本将通过本地套接字与辅助脚本通信,并让辅助脚本生成Excel。
这听起来可能很复杂,但实际上它并不是很多代码,它解决了一个您很快就会遇到的问题:您应该只有一个Excel实例正在运行,否则您可能会遇到问题。辅助脚本可以将请求排队,一个接一个地交给Excel,然后接受队列中的下一个请求。
发布于 2011-11-28 19:26:25
进入任务计划器,让一切以本地用户的身份运行。这可能需要您输入密码,所以如果您还没有密码,就创建一个密码。
Excel是一个用户级别的应用程序,不应该作为系统运行。我肯定有办法解决这个问题,但你应该让一切都保持在正确的水平上。
在用户级别上运行Apache并不是问题。
发布于 2012-11-29 10:33:06
尝试创建以下目录:
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
https://stackoverflow.com/questions/8274830
复制相似问题