2009-09-16 53 views
0

我正在研究一个项目,其设置使用Microsoft知识库文章KB317540中介绍的API来安装和卸载程序集到GAC中。知识库文章中指出:使用未记录的本地代码API将项目安装到GAC中

摘要
本机代码应用 程序编程接口(API),从而 让你与全球 程序集缓存(GAC)互动不 在.NET Framework 软件记录开发工具包(SDK) 文档。

更多信息
注意:不要在你的应用程序中使用 这些API 执行程序集绑定或测试 组件或其他 运行时间,开发或设​​计时 操作的存在。只有管​​理工具 和安装程序必须使用这些 API。如果您使用GAC,则此 会将您的应用程序直接暴露给 程序集绑定的易碎性,或者可能是 导致您的应用程序在未来的 版本的.NET Framework上错误地运行 。

GAC存储在 计算机上的所有应用程序之间共享的 程序集。实际存储位置 和GAC的结构不是 记录,并且可能会更改 未来版本的.NET Framework 和Microsoft Windows操作 系统。

唯一支持的方法来访问 组件在GAC是通过被该 文章中记录了 的API。

大多数应用程序不必使用 这些API,因为程序集 绑定是由公共语言运行库自动执行的 。只有 自定义安装程序或管理 工具必须使用这些API。微软 Windows安装程序具有本地支持 用于将程序集安装到GAC。

有关程序集 和GAC的更多信息,请参见.NET Framework SDK。

在下面的 方案中使用GAC API:当您将一个 程序集安装到GAC时。当您从GAC中删除 程序集时。当您从GAC中导出程序集时,您可以从 中导出程序集。在 中列举了GAC中可用的组件 。注意: 必须先调用CoInitialize(Ex),然后才能使用 规范中描述的任何函数和 接口。

这种技术的优缺点是什么?这些API可以安全使用吗?任何人在那里使用它们?如果是这样,为什么?

回答

1

为什么不只是创建一个Windows安装程序包?请参阅Demystifying the .NET Global Assembly Cache。引用:

Windows安装程序的开发人员 包可以安装组件使用Microsoft Windows安装程序 2.0 GAC。这是安装这种共享组件的首选方式, 应该是共享 组件安装在非 开发机器上的唯一方式。

+0

如果这取决于我,那就是我所要做的,但我的团队中的其他人似乎认为Windows Installer“太难”了,他们想要使用Inno Setup。这真的对我来说很不好,但我目前的数量超过了: – 2009-09-16 01:27:35

+0

@Tim:我发现这个链接可能有所帮助:https://msmvps.com/blogs/carlosq/archive/2009/06/09/net-support -in-下一版本的-innosetup的安装程序,方便换基于COM-附加ins.aspx – TrueWill 2009-09-16 02:04:29

1

它说:“只有管理工具和安装程序必须使用这些API。”

有一些工具(例如命令行工具)可与GAC一起使用。为什么不调用这些可执行文件,而不是直接使用这些API?

+0

对,是的,我知道它说什么 - 问题是我的团队成员认为他们在“创建安装程序”。我认为他们误解了这个说法。对我而言,这意味着如果你想使用这些API,你的进程名称必须是MSIExec。然而,Inno Setup(正在使用的工具)会吐出一个“设置产品”的setup.exe - 它是一个“安装程序”。我相信你可以看到那里的含糊不清。 – 2009-09-16 01:33:43

+0

我认为它可能更容易(例如1行代码)来调用命令行工具,而不是使用像那样的API。 – ChrisW 2009-09-16 02:02:46

相关问题