如何判断哪些应用程序在GAC中注册了给定的程序集?

时间:2011-10-22 17:03:06

标签: gac gacutil global-assembly-cache

当尝试使用gacutil.exe删除给定程序集(在这种情况下为log4net.dll,但它应该适用于任何类似情况)时,由于应用程序需要程序集,操作将失败。但是,我无法弄清楚如何确定哪些应用程序实际需要它。由于输出似乎表明需求记录在MSI数据库/ Windows Installer中,似乎某些util能够列出在MSI数据库中注册的所有GAC程序集(我可以只搜索具有log4net的条目) .dll)或允许我指定一个特定的GAC程序集,它会列出依赖项(理想情况下,如果存在相关的依赖链:)

C:\ » gacutil /u log4net
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.


Assembly: log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL
Unable to uninstall: assembly is required by one or more applications
Pending references:
              SCHEME: <WINDOWS_INSTALLER>  ID: <MSI>  DESCRIPTION : <Windows Installer>
Number of assemblies uninstalled = 0
Number of failures = 0

谢谢!

1 个答案:

答案 0 :(得分:4)

我从来没有发现任何好事。我所做的(虽然有效,但很糟糕)是运行procmon以查看gacutil正在访问的内容并注意到它击中了一个键HKCR \ Installer \ Products \ 098D637EEF1AFF14586E779FE4C38C4D。当我在注册表中查看该密钥时,它显示该产品是“Plantronics Spokes Software”。

我进入了appwiz.cpl并删除了该应用程序,然后gacutil / l log4net显示log4net不再出现在GAC中。

我仍然希望找到一个更好的答案,但我想现在'运行procmon,过滤器处理= gacutil.exe和HKCR \ Installer \ Products下的路径'至少比什么都好。

相关问题