Wix - 打开数据库后,文件被锁定以进行删除

时间:2014-03-17 10:25:48

标签: c# database view wix windows-installer

尝试使用WindowsInstaller库或Wix Microsoft.Deployment.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'。

我也试过了对象

  

数据库

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

我能够找出阻止删除操作的内容 该文件似乎是只读。 我不知道为什么会遇到这种异常,但以下问题解决了这个问题:

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

希望它会帮助别人。

我感谢所有在这里为您提供帮助的人。

答案 1 :(得分:0)

以下是您可以针对您的问题采取的一些步骤:

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