关于“找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上。”的解决

一个项目需要在Win系统用计划任务执行PHP,写了个批处理bat利用php-cgi.exe进行执行PHP文件,由于在服务器运行为了不影响服务器既有的PHP配置信息,同时也是考虑未来的移植性还有性能问题,自己弄了个精简了的PHP运行环境。

可在Win下死活也是执行不了,运行批处理直接闪一下就啥都木有咧,于是为了看具体的状态,使用cmd命令行模式去运行批处理文件,结果提示“系统无法执行指定的程序。”,悲催了,难道朋友将服务器给阉割导致不能执行.bat文件?

正咬牙切齿的时候决定再尝试一下确定到底是什么问题。这一次直接在cmd中执行php,运行php.exe -c php.ini -i(指定同php.exe相同目录下的php.ini作为php的配置文件,并且显示phpinfo信息),回车后,竟然还是那句该死的“系统无法执行指定的程序。”,看来不是系统运行不了bat批处理,是干脆不能执行php.exe,咋回事捏?

再次尝试寻找问题的症结,这次尝试在cmd运行服务器原有的php.exe,奇迹出现了,竟然可以正常执行并且返回了phpinfo信息。这下看来应该是我自己所谓的精简的问题,有点晕~~

纠结的时候突然想到,服务器运行的是PHP 5.2.x版本,而我自己打包的是PHP 5.3.x,貌似是用VC9编译的,而php 5.2是用VC6编译的,看来应该是服务器没有安装Microsoft Visual C++运行库导致的,这只是一个初步想法,为了保险尝试看看系统日志有没有留下啥鸟东西(一般微软自家的东西出错了都会老实的写日志的)。

在系统日志中发现了来源均为“SideBySide”,事件ID一个:32,两个59。

事件ID为32的描述是这样的:找不到附属汇编 Microsoft.VC90.CRT,上一个错误是 参照的汇编没有安装在系统上。
事件ID为59的描述是这样的:Resolve Partial Assembly 为 Microsoft.VC90.CRT 失败。 参考错误消息: 参照的汇编没有安装在系统上。
另一个事件ID为59的描述是:Generate Activation Context 为 E:\***\php.exe 失败。 参考错误消息: 参照的汇编没有安装在系统上。

哈哈,看来问题原因找到了,就是因为缺少VC9的运行库,老实的去微软找:http://download.microsoft.com/download/9/7/7/977B481A-7BA6-4E30-AC40-ED51EB2028F2/vcredist_x86.exe,下载回来vcredist_x86.exe(Microsoft Visual C++ 2008 Redistributable 9.0.30729.4148)安装,再次执行php.exe成功了^_^

这就是整个解决问题的过程。估计以后也会有其他人遇到此类问题的,分享一下经验吧:)

标签:bat, microsoft, PHP, SideBySide, VC9, 服务器, 计划任务

添加一条评论 »本文共 8 条评论

  1. 已经解决,谢谢

    回复

  2. 谢谢!

    回复

  3. 的确如此,搞了一晚上,你这此分享,帮了我很大的忙谢谢。

    回复

  4. 一知半解,唉,谁让我编程能力烂到家呢,嘿嘿

    回复

    • 呵呵,这个解决方法和过程应该跟编程关系不是非常大^_^

      回复

      • 呀,回复速度真快。

        回复

        • 哈哈,刚巧赶上在写新日志看到你留言^_^

          回复

*

Deepseath Modified from Green Hope Theme · Proudly powered by WordPress · 津ICP备09005418号  津公网安备 12010302001005号