文件在打开其数据库后被锁定以进行删除

本文关键字:锁定 删除 数据库 文件 | 更新日期: 2023-09-27 17:50:45

我在尝试使用WindowsInstaller库或Wix microsoft . deploy .WindowsInstaller.
我,得到例外,文件正在使用的进程,我不能删除它,即使我已经关闭了所有的记录,视图和数据库,并处置它们。

try
{
   string currentDir = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
   string msiPath = "PathTo'MyMSI.msi";
   using (InstallPackage installPackage = new InstallPackage(msiPath, DatabaseOpenMode.ReadOnly))
   {
       string query = "SELECT * FROM Property WHERE Property = 'ProductVersion'";
        using (View view = installPackage.OpenView(query))
        {
            view.Execute();
            using (Record record = view.Fetch())
            {
               string version = record.GetString(2);
               Console.WriteLine(version);
               record.Close();
            }
            view.Close();
         }
         installPackage.Close();
    }
    File.Delete(msiPath);
}
catch (Exception e)
{
   Console.WriteLine(e.Message);
}  

仍然得到以下内容:

访问路径'PathTo'MyMSI。Msi被拒绝了。

我也尝试过对象

数据库

文件在打开其数据库后被锁定以进行删除

我能够弄清楚是什么阻止了删除操作。
看起来文件位于只读中。我不知道为什么会出现这种异常,但是下面的方法解决了它:

//removing read only from file in order to interact with it
FileInfo fileInfo = new FileInfo(msiPath);
 if (fileInfo.IsReadOnly)
 {
   fileInfo.IsReadOnly = false;
 }  

希望它能帮助别人。

感谢每一个花时间帮助我的人。

您可以遵循以下步骤来解决您的问题:

  1. 等待一分钟并再次尝试删除文件,有时Windows或使用该文件的程序可能仍在关闭,因此仍在使用您试图删除的文件。
  2. 关闭资源管理器窗口并重新打开。
  3. 找到使用该文件的程序并关闭它。如果你不确定是什么程序在使用这个文件,关闭所有的程序,直到你能够删除这个文件。
  4. 尝试使用unlocker,这是一个免费的软件程序,旨在解锁Windows或其他程序正在使用的任何文件,而无需重新启动计算机。
  5. 重启计算机。如果在关闭所有程序后,您仍然无法删除该文件,很可能是后台的某些东西仍在使用该文件。
  6. 如果重新启动计算机后,您仍然无法删除该文件,请将计算机启动到安全模式并删除该文件。

谢谢