牛骨文教育服务平台(让学习变的简单)

Mac: 网络用户遇到Adobe Reader 9.x/10.x异常退出的解决

异常退出表现:

一个用户目录存放在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@中国在线教育]和文章中标注的所有版权信息。
其它事宜,如:需要商业用途或以盈利为目的的、或者部分转载的等等,请与本作者联系: TonyLiu2CA@yahoo.com*

  • *

把其它本地用户中的9.0_x86目录中的所有文件复制过来,是第一个想到的方法,可以问题依旧。所以,SQLiteUtils不仅仅是在生成这些文件的时候有错误,就连读取都不行,那么就只好把SQLiteUtils需要存储的文件重新定向到本地硬盘。经过测试,这个方法的确奏效,不过也走了一点弯路,比如不能把Acrobat目录连接到本地,虽然9.0_x86是其中的一个子目录,而只能把9.0_x86目录设置成软连接。

问题解决:

问题找到了,经过测试也是可以解决问题的,不过对于网络用户可以通过两个方式来最终解决这个问题。

1. 登录脚本钩子:

第一个方法是使用登录脚本钩子的方式,如果你单位的系统部署的时候,系统映像里面已经包含了登录脚本钩子的实现,那么就可以使用这个方法。这个方法需要把脚本部署在每个客户端机器上,所以需要一些努力才能确认部署完成,特别是大型环境和移动系统较多的情形。而且这个方法,适合于针对只有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";

2. 工作组管理器:

 

而使用Workgroup Manager设置,对用户/用户组/机器/机器组,进行组合控制,更加灵活。

选择所要设置的目标,选择Preferences->Details, 选择文件夹重定向,并编辑它,添加如图的各个键值。

 

 

结束语:

至此,该问题解决,对于10.x版本的只要稍作修改,同样可以轻松解决。

其实,Adobe Acrobat等其它软件,也有这个运行错误,而这个思路同样适用于它们。

 

 

 

Tony Liu, 2011-02-13

于Calgary