从Microsoft Windows安装程序类获取已安装的DLL列表

Bra*_*rds 8 c# windows-installer visual-studio-2010

我正在尝试为现有应用程序编写一个插件(实际上是一个生成插件的可视化工作室模板向导).作为插件安装的一部分,我必须将条目插入配置数据库.通常有多个DLL对应于功能的不同部分,有时每个都需要相同表中的条目,但通常具有不同的表条目组合.我需要从安装程序中添加这些内容.

出于政策原因,一切都在C#中.

我目前正在使用Visual Studio Installer(VS2010)来创建安装程序.我更喜欢使用可能安装在用户机器上的东西来保持模板/向导安装简单,但我可以(如果需要)捆绑/链式安装开源(或至少可自由再分发)的替代方案安装程序.

例如,要向应用程序添加菜单项,我必须将条目插入到几个表中.在过去,我通过使用从安装程序应用程序调用的安装程序帮助程序(有时是应用程序,有时是安装程序类)来完成此操作.在该设计中,我将我需要添加到配置表中的设置嵌入到安装程序帮助程序中,然后执行SQL(通过C#:-))来实际执行添加.

问题是这导致将相同的信息重复到两个地方,并且在向导环境中它不是非常可维护或干净.我真的更喜欢从我可以在插件程序集上设置的某些属性中反省这些信息.

但是我遇到了第一步 - 我的Installer类如何找出这个安装安装(或将要安装)的组件?

我确实考虑过尝试将DLL列表嵌入到自定义安装程序属性中,但这也很难从我的插件向导中生成.理想情况下,我可以注册一些现有的事件,或者我可以阅读的现有属性,但我还没有发现它.

Tom*_*get 2

我不清楚运行向导和看到 .msi 之间会发生什么。(向导的输出是 VS 项目还是 .msi 本身 [在这种情况下,最终用户根本不需要 VS]?)但是,让我们开始吧...

看起来你的瓶颈是 Visual Studio 安装程序。它也是一个定时炸弹,因为它会随着 VS2010 一起消亡。许多项目(例如 Visual Studio 本身)都使用 WiX 工具集。对于Visual Studio和SharpDevelop用户来说,WiX“很可能安装在用户的机器上”并且是“开源的”。它可以作为二进制文件提供,您可以将其包含在向导中,也可以由用户或为用户从 NuGet、Chocolatey 或 exe 安装完整产品(包括 VS 扩展)。

使用 WiX,您可以编写或生成描述 Windows Installer 程序包的内容、UI 和操作顺序的 XML 文件。调用 WiX 可执行文件来执行实际构建。如果安装 WiX 的 MSBuild 文件,则可以使用 MSBuild 项目来编排构建。如果安装了WiX的VS扩展,就可以使用VS来编辑项目。(现代 VS 项目是 MSBuild 项目。)MSBuild 附带 .NET(直到下一个版本,它将是一个单独的插件)。

因此,向导可以根据用户输入和插件数据生成 WiX 文件。它还可以构建 MSI。您仍然可以使用安装帮助程序,但最好使用 WiX 的 SQL Server 自定义操作(如果它们适用于您的情况)来可靠地支持卸载和升级。

由于至少一些插件安装和配置数据来自插件,因此您可以让插件项目生成它,以便它可以与您的向导一起安装。WiX 支持将单独组件的信息放置在单独的文件中,因此您无需为向导维护组合文件。如果信息比较简单,插件作者可以手动维护。否则,它可以在插件编辑时或插件构建时生成。在编辑时,您可以使用 T4 模板(内容与 C# 代码混合)。在构建时,您可以使用内联或编译的自定义 MSBuild 任务(用 C# 编写)。[.csproj 文件是 MSBuild 项目。] 同样,您的向导安装程序将抓取生成的文件以及插件 DLL,以安装在运行向导的计算机上。

您还可以使用 WiX 安装向导。如果您的向导是 VSIX 包,请使用 WiX 的 VSIX 自定义操作。哎呀,您可能可以将 Wix 文件用于向导安装程序和为用户生成的安装程序的插件。