icedream

2009年10月5日 #

解决iTunes9在Windows2003下无法安装的问题

iTunes只从8.2版本开始就不支持Windows 2003了。
在9.0版本之前,8.2版本之后出来的版本都是除了驱动其他都能正常安装的。
现在连最重要的iTunes都装不了了。
这下可气坏像我这样喜欢在Windows Server版下工作的玩家。
今天一起之下决定网上找不到解决方案的话 自己进行反汇编也要将其解决掉。
先说一下在Windows 2003下安装会出现的问题吧。
  1.驱动装不上,提示要WinXP SP1及以上版本,显然是把Server版给蔽掉了;这个装不上对于机上上没有老版本的玩家那可是致命的。
  2.iTunes装到最后,启动iPodService时,哐,弹出一个应用程序错误。对于编程的人来说,就跟读了空指针一样。最后无法安装通过。

我在网上找了一大圈,都没法完全的解决问题。
对于第一个问题,方法是一致的,确实能解决问题,用Orca这个工具。但对于第二个问题都没法完全解决,在我的机子上行的通的一个方法是安装到启动 iPodService时将旧版本的iPodService.exe替换到安装文件夹中,这样可以欺骗过去,但由于iPodService.exe用的是老版本的,所以功能会有缺陷,至于会不会使软件变得不稳定,那就不清楚了,我也懒得去试。

下面是我的具体解决方案:
  1.将iTunes解压到一个文件,例如C:\iTunesSetup。会得到7个msi文件,一个SetupAdmin.exe,这个文件没用。
  2.用Orca工具打开AppleMobileDeviceSupport.msi,找到LaunchCondition,将Condition中的 ((VersionNT=501 AND ServicePackLevel>=2) OR VersionNT>=600)改为((VersionNT=501 AND ServicePackLevel>=2) OR VersionNT>501)。VersionNT代表的是当前操作系统的版本号,501是XP,502是2003,600是Vista(猜的,因为我的VS2005MSDN上没有600版本)。再点View->Summary Information...,将Languages项改为1033,其他的不留,不然安装的时候还会出问题,这个问题应该是由于系统不是英文版的问题,反正这东西是是驱动,中文的还是英文的不会影响iTunes的使用。修改完之后保存。
  3.MobileMe.msi的修改类似步骤2。
  4.用命令msidb -x iTunes.cab -d iTunes.msi将iTunes.msi中的iTunes.cab包提取出来,因为iPodService.exe就在这个包里。
  5.用命令md iTunes在C:\iTunesSetup下建立一个iTunes文件夹
  6.用命令expand iTunes.cab -F:* iTunes
  7.UltraEdit打开C:\iTunesSetup\iTunes\iPodService.exe,将6A 01 6A 02 6A 00 6A 00 C7替换为6A 03 6A 02 6A 00 6A 00 C7,在将6A 01 6A 01 52 50 FF D6 52替换为6A 03 6A 01 52 50 FF D6 52。因为这里在比较版本号的时候用了相等比较,改了之后版本的比较就是大于等于比较了,这样Windows 2003也能比较通过了。修改完之后保存。
  8.用命令cabarc –m LZX:21 –r N iTunes.cab "iTunes\*"将修改后的程序压缩成cab包。
  9.用命令msidb -k iTunes.cab -d iTunes.msi将iTunes.cab从iTunes.msi中删除掉。
  10.用命令msidb -a iTunes.cab -d iTunes.msi将iTuens.cab加入到iTunes.msi中。
  最后双击iTunes.msi就可以安装了,大功告成。

以上用到的工具除了UltraEdit,其他的都是可以从M$那里得到。对于UltraEdit你也可以选择用其他的十六进制编辑器,只要能查找替换就行了。
我用的iTunes的版本为9.0.1.8,第7步涉及到iPodService.exe的实现,所以版本不同可能找不到对应的字节,如果他们不更改系统版本判断的代码,应该还是可以继续使用第7步。

注:转载请注明出处!


posted @ 2009-10-05 21:31 IceDream 阅读(6803) | 评论 (4)编辑 收藏

仅列出标题