我们正在将我们的旧的Perl / CGI应用程序内部移动到一个新的系统,并遇到了一个麻烦。 当我运行:
perl -MXML::Parser -e 1
从命令行来看,一切都很好。 但是,当我use XML::Parser从CGI脚本运行它时,所有地狱破坏:
无法为模块XML :: Parser :: Expat:load_file加载“C:/strawberry/perl/site/lib/auto/XML/Parser/Expat/Expat.dll”:指定的模块无法在C: /strawberry/perl/lib/DynaLoader.pm line 200,line 55. at C:/strawberry/perl/site/lib/XML/Parser.pm line 18编译在C:/ strawberry / perl / site / lib下的require失败/XML/Parser.pm第18行,第55行。BEGIN失败 – 编译在C:/strawberry/perl/site/lib/XML/Parser.pm第22行,第55行中止。编译在(eval 43)第1行,第55行。BEGIN失败 – 编译在(第43行)第1行第55行中止。
添加到perl安装的其他模块正常工作(MD5,WIn32 :: ODBC等),但是这个外部的一个咆哮。
服务器是IIS 7(这个应用程序是我们新来的),x64 Win2008(也是我们新来的)。
编辑:
经过一段时间后,这不是唯一的模块无法加载。 XML :: Simple也是如此。 几乎相同的错误。 Perl声称的DLL不存在,存在就好了。 而且事情也是从命令行工作的。
build议?
在Cwd.pm中的Windows的perl发行版中存在一个错误。 有关详细信息,请参阅https://rt.cpan.org/Public/Bug/Display.html?id=56225 。
这个修补程序对我来说是取代这一行:
if (eval 'defined &DynaLoader::boot_DynaLoader') {
同
if (eval { defined &DynaLoader::boot_DynaLoader; }) {
在sub _win32_cwd
我还在这里find了更多的相关信息:www.epic-ide.org/faq.php#debug
很抱歉回答我自己的问题,但我偶然发现了这个…
在几小时后,这个问题变成了IIS应用程序池设置。 如果你的Load User Profile被设置为False,那么Perl的Dynaloader自己Dynaloader而且没有任何工作 – 而且没有特别有用的信息。 我不知道哪个是默认设置,但是如果设置为false,则会导致一切失败。
所以现在事情很好,这里是应用程序池中的设置:
32位:启用用户:应用程序池加载用户configuration文件:是
我试图让CGI程序作为一个真正的用户(我在命令行中使用的那个)运行,并且注意到我没有得到我想要的环境,尽pipe我已经设置了正确的用户。 翻转这个开关导致一切正常。 最终我回到了使用应用程序池,但确认这个开关是原因。