一个用户目录存放在AFP网络服务器上的网络用户登陆后,初次运行Adobe Reader 9.x/10.x时,Reader正常询问用户接收授权证书,以及是否使用Reader来打开所有的PDF文件等问题后,Reader菜单和程序图标在Dock上停留短暂时间后会突然退出,并显示下图的运行错误提示:
在以后的运行中,同样是发生异常退出,用户根本无法使用Adobe Reader。
而本地用户以及移动用户(用户目录存放在本地磁盘),却没有这个问题。在最初的测试中发现,这个问题似乎和客户端和服务器端系统本身的版本无关,只同网络用户和Adobe Reader软件本身有关。
跟踪系统的logs的结果是:
------------------------------------------------------------------------------------------------------------------------
2/10/11 1:31:53 PM Dock[10487] SQLite failure in directoryCreated for <ECDirectory: 0x10183fd60> {path=/Network/Servers/s374rls2.com/UserData/374-123/Documents/} lineNum=759 err=5 (database is locked)
2/10/11 1:32:08 PM [0x0-0xe90e9].com.adobe.Reader[10567] terminate called after throwing an instance of 'SQLiteUtils::SQLiteException'
2/10/11 1:32:10 PM com.apple.launchd.peruser.2045665344[8759] ([0x0-0xe90e9].com.adobe.Reader[10567]) Job appears to have crashed: Abort trap
2/10/11 1:32:10 PM ReportCrash[10578] Saved crash report for AdobeReader[10567] version 9.3.0 (9.3.0) to /Network/Servers/s374rls2.com/UserData/374-123/Library/Logs/DiagnosticReports/AdobeReader_2011-02-10-133210_w374-764.crash
------------------------------------------------------------------------------------------------------------------------
再来看看错误报告的前面部分的内容:
------------------------------------------------------------------------------------------------------------------------
Process: AdobeReader [9435]
Path: /Applications/Adobe Reader 9/Adobe Reader.app/Contents/MacOS/AdobeReader
Identifier: com.adobe.Reader
Version: 9.3.0 (9.3.0)
Code Type: X86 (Native)
Parent Process: launchd [8759]
Date/Time: 2011-02-10 13:23:17.423 -0700
OS Version: Mac OS X 10.6.3 (10D2063a)
Report Version: 6
Interval Since Last Report: 5812 sec
Crashes Since Last Report: 2
Per-App Interval Since Last Report: 27 sec
Per-App Crashes Since Last Report: 2
Anonymous UUID: AA88CA84-2CD6-42AF-A4ED-D41DD8569C16
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
abort() called
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libSystem.B.dylib 0x98449132 __kill + 10
1 libSystem.B.dylib 0x98449124 kill$UNIX2003 + 32
2 libSystem.B.dylib 0x984db8e5 raise + 26
3 libSystem.B.dylib 0x984f199c abort + 93
4 libstdc++.6.dylib 0x9967bfda __gnu_cxx::__verbose_terminate_handler() + 433
5 libstdc++.6.dylib 0x9967a17a __cxxabiv1::__terminate(void (*)()) + 10
6 libstdc++.6.dylib 0x9967a1ba __cxxabiv1::__unexpected(void (*)()) + 0
7 libstdc++.6.dylib 0x9967a2b8 __gxx_exception_cleanup(_Unwind_Reason_Code, _Unwind_Exception*) + 0
8 com.adobe.Acrobat.framework 0x8064ecc7 AcroSecurityBailOutImpl + 6611123
9 com.adobe.Acrobat.framework 0x8061fc76 AcroSecurityBailOutImpl + 6418530
10 com.adobe.Acrobat.framework 0x8061eed5 AcroSecurityBailOutImpl + 6415041
11 com.adobe.Acrobat.framework 0x806204c0 AcroSecurityBailOutImpl + 6420652
12 com.adobe.Acrobat.framework 0x809599f3 0x7fe27000 + 11741683
13 com.adobe.Acrobat.framework 0x80959b9e 0x7fe27000 + 11742110
14 com.adobe.Acrobat.framework 0x805be074 AcroSecurityBailOutImpl + 6018144
15 com.adobe.Acrobat.framework 0x80443bc6 AcroSecurityBailOutImpl + 4468658
16 com.adobe.Acrobat.framework 0x80443db1 AcroSecurityBailOutImpl + 4469149
17 com.adobe.Acrobat.framework 0x7ff69443 RunAcrobat + 1311411
18 com.adobe.Acrobat.framework 0x7ff6917a RunAcrobat + 1310698
19 com.apple.CoreFoundation 0x96c8976b __CFRunLoopRun + 8059
20 com.apple.CoreFoundation 0x96c870f4 CFRunLoopRunSpecific + 452
21 com.apple.CoreFoundation 0x96c86f21 CFRunLoopRunInMode + 97
22 com.apple.HIToolbox 0x9133b15c RunCurrentEventLoopInMode + 392
23 com.apple.HIToolbox 0x9133af11 ReceiveNextEventCommon + 354
24 com.apple.HIToolbox 0x9133ad96 BlockUntilNextEventMatchingListInMode + 81
25 com.apple.AppKit 0x94a7c0fd _DPSNextEvent + 847
26 com.apple.AppKit 0x94a7b93e -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
27 com.apple.AppKit 0x94a3dbc7 -[NSApplication run] + 821
28 com.adobe.Acrobat.framework 0x7fe29b8d RunAcrobat + 2557
29 com.adobe.Acrobat.framework 0x7fe292ce RunAcrobat + 318
30 com.adobe.Reader 0x00002e8b start + 2371
31 com.adobe.Reader 0x0000264a start + 258
32 com.adobe.Reader 0x00002571 start + 41
... ...
------------------------------------------------------------------------------------------------------------------------
从logs中的记录看,是Adobe Reader内置的SQLiteUtils在访问它的数据库的之后,无法锁定,从而简单地抛出一个致命错误并退出,致使后面的程序无法继续运行。而网络用户相关的文件访问,是通过AFP网络协议来实现的,所以很可能是因为它不支持AFP网络协议造成的。
其实,在旧旧版本中旧有过类似的问题,只不过在Adobe Reader 8.1.3中已经解决了这个问题,可是在新版本中9.x和10.x中这个类似的问题又出现了,而且至今不再解决这个问题。
查看Adobe的preference文件,没有发现问题,而它产生的一些字体缓存文件,却出现了问题。比如~/Library/Application Support/Adobe/Acrobat/9.0_x86目录中的,AdobeCMapFnt09.lst和AdobeComFnt09.lst的文件大小是0KB, 而正常的应该是4KB,这说明至少在生成这两个文件时产生了错误。
版权信息 : 本着开放交流的原则欢迎转载,除非明确声明"谢绝转载"等字样. 所有文章/图片/代码(除转载和翻译),版权均属文章作者 .
转载请遵守下面规则:
1)保持文章的完整性; 2)不得以盈利为目的; 3)完整标注文章作者[Tony Liu@中国在线教育 ]和文章中标注的所有版权信息。
其它事宜,如:需要商业用途或以盈利为目的的、或者部分转载的等等,请与本作者联系: [email protected]
把其它本地用户中的9.0_x86目录中的所有文件复制过来,是第一个想到的方法,可以问题依旧。所以,SQLiteUtils不仅仅是在生成这些文件的时候有错误,就连读取都不行,那么就只好把SQLiteUtils需要存储的文件重新定向到本地硬盘。经过测试,这个方法的确奏效,不过也走了一点弯路,比如不能把Acrobat目录连接到本地,虽然9.0_x86是其中的一个子目录,而只能把9.0_x86目录设置成软连接。
问题找到了,经过测试也是可以解决问题的,不过对于网络用户可以通过两个方式来最终解决这个问题。
第一个方法是使用登录脚本钩子的方式,如果你单位的系统部署的时候,系统映像里面已经包含了登录脚本钩子的实现,那么就可以使用这个方法。这个方法需要把脚本部署在每个客户端机器上,所以需要一些努力才能确认部署完成,特别是大型环境和移动系统较多的情形。而且这个方法,适合于针对只有Adobe安装的机器,而不是针对用户,这样,只有安装了Adobe的机器才需要
具体方法是江下面的语句加入到你的登录脚本中。
# Create new 'Caches' folder on the local hard drive
`mkdir -p -m 777 "/private/tmp/$userLoggedIn/9.0_x86"`;
`mkdir -p "$userHomeDir/Library/Application Support/Adobe/Acrobat"`;
# Create symbolic link to point user's 'Caches' folder to local directory
`ln -s -f -h "/private/tmp/$userLoggedIn/9.0_x86" "$userHomeDir/Library/Application Support/Adobe/Acrobat/9.0_x86"`;
而使用Workgroup Manager设置,对用户/用户组/机器/机器组,进行组合控制,更加灵活。
选择所要设置的目标,选择Preferences->Details, 选择文件夹重定向,并编辑它,添加如图的各个键值。
结束语:
至此,该问题解决,对于10.x版本的只要稍作修改,同样可以轻松解决。
其实,Adobe Acrobat等其它软件,也有这个运行错误,而这个思路同样适用于它们。
Tony Liu, 2011-02-13
于Calgary