BUG: Visual Studio .NET Setup Projects Execute Custom Action of Previous Version when Upgrading
Posted on 2004-08-28 01:35 Felix Wang (Intl Vendor) 阅读(1057) 评论(0) 收藏 举报
这是一个关于Setup Project的问题。简单来说也就是RemovePreviousVersions,Install Custom Action以及Uninstall Custom Action同时用的时候会出点小乱子。有个美国的MVP写了篇KB报告BUG,如下
http://support.microsoft.com/?id=555184
我帮他看了一下,确实是有问题。而且问题在Whidbey beta 1里还是没有被fix。
VS.Net setup project的custom action,其实是通过一个unmanaged DLL去调用的。unmanaged DLL跑在msiexec.exe的进程里,通过API得到一个IManagedInstaller interface的指针,最后调用我们的managed Installer class。我们的assembly是通过Assembly.LoadFrom加载的。
现在的问题就是msiexec.exe的AppDomain在uninstall version 1的时候把一个旧版本的managed Installer class加载到AppDomain,然后没有释放这个AppDomain。当在install version 2时,应该Assembly.LoadFrom一个新版本的managed Installer class。由于旧版本的assembly仍然在AppDomain里,CLR就不去重新加载更新过的版本了。所以问题就出现了:version 1的install custom action被执行了,而不是version 2的……
对于这个问题,似乎没有什么好的workaround。只好保证两个版本的managed Installer class assembly不重名了……
http://support.microsoft.com/?id=555184
我帮他看了一下,确实是有问题。而且问题在Whidbey beta 1里还是没有被fix。
VS.Net setup project的custom action,其实是通过一个unmanaged DLL去调用的。unmanaged DLL跑在msiexec.exe的进程里,通过API得到一个IManagedInstaller interface的指针,最后调用我们的managed Installer class。我们的assembly是通过Assembly.LoadFrom加载的。
现在的问题就是msiexec.exe的AppDomain在uninstall version 1的时候把一个旧版本的managed Installer class加载到AppDomain,然后没有释放这个AppDomain。当在install version 2时,应该Assembly.LoadFrom一个新版本的managed Installer class。由于旧版本的assembly仍然在AppDomain里,CLR就不去重新加载更新过的版本了。所以问题就出现了:version 1的install custom action被执行了,而不是version 2的……
对于这个问题,似乎没有什么好的workaround。只好保证两个版本的managed Installer class assembly不重名了……
浙公网安备 33010602011771号