gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:41:08 25 4
gpt4 key购买 nike

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

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

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

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

问题是这会导致在两个地方重复相同的信息,并且在向导环境中它不是很容易维护或干净。我真的更愿意从我可以在插件程序集上设置的某些属性中反省这些信息。

但是我在第一步时遇到了问题 - 我的 Installer 类如何找出此安装已安装(或将要安装)哪些程序集?

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

最佳答案

你可以做的是使用 Windows Installer API转储给定 MSI 包中包含的所有 DLL。

在 C# 中,有各种库或示例代码可用于执行此操作。

在这里,我将使用开源的Wix toolset项目的 DLL。因此,您只需要下载二进制文件(不是 wix 安装程序),创建一个项目并添加对 Microsoft.Deployment.WindowsInstaller.dllMicrosoft.Deployment.WindowsInstaller.Package.dl 的引用l 在这个二进制文件目录中

这是一个示例程序,它写出包的所有 DLL 文件部分。

class Program
{
static void Main(string[] args)
{
string path = @"... myfile.msi";
using (InstallPackage package = new InstallPackage(path, DatabaseOpenMode.ReadOnly))
{
foreach (var kvp in package.Files.Where(f => Path.GetExtension(f.Value.TargetName) == ".dll"))
{
Console.WriteLine(kvp.Value.TargetName);
}
}
}
}

关于c# - 从 Microsoft Windows 安装程序类获取已安装 DLL 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20941398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com