当前位置: 首页 > 编程语言 > C#

以编程方式检查Gac中是否存在dll,如果在网格共享

时间:2023-04-10 19:03:53 C#

中显示它,以编程方式检查Gac中是否存在dll。如果它显示在网格中,我将在文件夹中有一个dll列表,我想检查应用程序中是否存在dll。如果是这样,我想在网格中添加该应用程序名称。任何人都可以告诉如何以编程方式进行。在此先感谢做一个assembly.LoadFrom并检查GlobalAssemblyCachetestAssembly=Assembly.LoadFrom(dllname);if(!testAssembly.GlobalAssemblyCache){//不在gac中}我认为正确的方法是FusionCOMAPI。在这里如何使用它:usingSystem;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Runtime.InteropServices;命名空间IsAssemblyInGAC{内部类GacApi{[DllImport("fusion.dll")]internalstaticexternIntPtrCreateAssemblyCache(outIAssemblyCacheppAsmCache,intreserved);}//GAC接口-IAssemblyCache。作为示例,未使用的vtable条目[ComImport,InterfaceType(ComInterfaceType.InterfaceIsIUnknown),Guid("e707dcde-d1cd-11d2-bab9-00c04f8eceae")]internalinterfaceIAssemblyCache{intDummy1();[PreserveSig()]IntPtrQueryAssemblyInfo(intflags,[MarshalAs(UnmanagedType.LPWStr)]StringassemblyName,refASSEMBLY_INFOassemblyInfo);intDummy2();intDummy3();intDummy4();}[StructLayout(LayoutKind.Sequential)]internalstructASSEMBLY_INFO{publicintcbAssemblyInfo;公共intassemblyFlags;公共长assemblySizeInKB;[MarshalAs(UnmanagedType.LPWStr)]publicStringcurrentAssemblyPath;公开cintcchBuf;}classProgram{staticvoidMain(){try{Console.WriteLine(QueryAssemblyInfo("System"));}catch(System.IO.FileNotFoundExceptione){Console.WriteLine(e.Message);}}//如果assemblyName不是完全限定的,随机匹配可能是publicstaticStringQueryAssemblyInfo(StringassemblyName){ASSEMBLY_INFOassemblyInfo=newASSEMBLY_INFO();assemblyInfo.cchBuf=512;);IAssemblyCacheassemblyCache=null;//获取IAssemblyCache指针IntPtrhr=GacApi.CreateAssemblyCache(outassemblyCache,0);如果(hr==IntPtr.Zero){hr=assemblyCache.QueryAssemblyInfo(1,assemblyInfo,refassembly;(hr!=IntPtr.Zero){Marshal.ThrowExceptionForHR(hr.ToInt32());}}else{Marshal.ThrowExceptionForHR(hr.ToInt32());}returnassemblyInfo.currentAssemblyPath;}}}已记录的GACAPI的文档:DOC:.NETFramework软件开发工具包(SDK)文档中未记录全局程序集缓存(GAC)API。此API旨在从本机代码使用,因此本文可能会帮助您从C#进行编程。如果您正在寻求快速修复,则可以使用gacutil/l。通常人们假设GAC在c:\assembly中,这是99%正确的。因此,您可以编写代码来遍历该文件夹中的文件。更正统的方法是使用基于COM的FusionAPI。此博客站点提供托管包装器:http://blogs.msdn.com/junfeng/archive/2004/09/14/229653.aspx此站点还包含示例托管代码,显示如何使用FusionAPI枚举已安装汇编-代码几乎是为您编写的,所以只需按ctrl+c,然后按ctrl+v...?http://blogs.msdn.com/b/junfeng/archive/2004/09/14/229650。aspxHTH...我知道这是一个老问题,但为了新手...我们有一个(免费的)Fusion库,可从http://dilithium.co.za/info/products/gac-api下载/which这就是它的作用。披露:是的,我有附属关系。不,如果你下载,我不会得到报酬。?以上就是C#学习教程:编程检查Gac中是否存在dll。把分享的内容全部展示在格子里,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: