gpt4 book ai didi

c# - 如何在读取或更新后关闭 MSI 文件

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:28 25 4
gpt4 key购买 nike

我需要有关关闭 MSI 文件的帮助。

我正在制作一个 MSI 文件编辑器,我可以在其中打开和更新一个 msi 文件。但问题是当我尝试重新打开同一个文件时(只是为了交叉检查更新的 msi),它会抛出一个错误

OpenDatabase,DatabasePath,OpenMode

在这条线上

database = installer.OpenDatabase(msiFile.FullName, MsiOpenDatabaseMode.msiOpenDatabaseModeTransact);

所以,我相信是因为 msi 文件已经打开。谁能帮我关闭已经打开的 msi。

最佳答案

我猜您正在使用从 WindowsInstaller.Installer COM 对象生成的互操作库。你不想那样做。相信我这一点。而是下载 Windows Installer XML 并查找在 SDK 文件夹中找到的 Microsoft.Deployment.WindodsInstaller 程序集。该库是 Deployment Tools Foundation (DTF) 的一部分,是与 Windows Installer 互操作的黄金标准。

在 DTF 中,Database 类实现了 IDisposable 接口(interface),因此最优雅的方法是将它放在 using 语句中。

using(Database database = new Database(...))
{
// Do Stuff Here
}

.NET 将在 block 完成后自动调用 Dispose() 方法,这反过来会关闭数据库并释放非托管句柄。然后将通知垃圾收集器在稍后的非重要时间清理托管类。如果您未能调用 Dispose(隐式或显式),则在垃圾收集器开始清理之前不会释放未管理的资源,正如您所见,这不是一件好事。

关于c# - 如何在读取或更新后关闭 MSI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14808906/

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