GAC write failed when upgrade with InstallShield

在接近final-build的时候,突然发现当前版本从上一个版本upgrade的时候,需要写到GAC (Global Assembly Cache)的assambly会写失败掉。但是只会在特定的Microsoft OS (我的重现环境是Win7)下会有这样的问题。

失败的具体情况为:

upgrade在卸载前版本的时候,GAC是清理干净了;

安装新版本的过程时,GAC会写不进去;

这种情况下,打开新版本,在task manager可以看到两个叫MSIEXEC.exe(windows installer进程)的进程被创建了;

 

纠其原因,是upgrade的时候,一些程序需要的global assembly不能正常的写到GAC。

这时候打开程序时,运行到引用这些global assembly的程序逻辑时,会发现这些assembly的缺失,所以新建了windows installer进程试图从installer中重新拿到global assembly去写入GAC。

但是程序逻辑没有停止,会发现引用失败,导致程序失败。只有windows installer把所有的global assembly写完了,再重新打开,程序才能正常启动。

 

这个是windows的已知bug,并且Microsoft已经给出了补丁。只要在出现问题的环境安装补丁就可以解决这个问题。补丁下载地址如下

Package:

-----------------------------------------------------------

-----------------------------------------------------------

KB Article Number(s): 981929

Language: All (Global)

Platform: x64

Location: (http://hotfixv4.microsoft.com/Windows%20Vista/sp3/Fix314138/6000/free/410051_intl_x64_zip.exe)

-----------------------------------------------------------

KB Article Number(s): 981929

Language: All (Global)

Platform: i386

Location: (http://hotfixv4.microsoft.com/Windows%20Vista/sp3/Fix314138/6000/free/410048_intl_i386_zip.exe)

原文地址:https://www.cnblogs.com/larson/p/4238027.html