【问题标题】:Access denied from another thread来自另一个线程的访问被拒绝
【发布时间】:2010-05-24 08:08:02
【问题描述】:

在一个程序中,我跨越一个线程(“工作线程”)。 Hera 我复制了一些文件,将一些数据写入数据库,最终删除了一些其他文件或目录。一切正常。现在的问题是,我决定将删除操作移至其他线程。所以工作线程现在复制文件或目录,写入数据库,如果需要删除一些其他文件,这个线程跨越另一个线程,第二个线程删除了所需的文件或目录。

问题在于,过去在工作线程中完成的删除工作 100%,现在当在辅助线程中完成同样的操作时,我有时会收到“拒绝访问”错误并且文件无法删除。不,工作线程此时绝对不会访问要删除的文件和目录。

有时(但不总是)主线程正在模拟某个用户,因此如果需要,删除线程也在模拟下运行,只是为了授予删除文件所需的权限,所以这应该不是问题。

有人知道为什么会发生这种情况吗?

【问题讨论】:

  • 您是否运行了防病毒软件?这有时会妨碍您添加、更改和删除文件。我倾向于将我的整个开发文件夹树添加到防病毒软件的受信任区域中,这似乎可以缓解问题。
  • 模拟仅适用于当前线程,因此如果您在主线程中进行模拟,则不会在您的工作线程中进行模拟。
  • 是的,这就是我说的原因:如果需要,删除线程也会在模拟下运行,即再次模拟。
  • 这在 Win7 上运行吗?再睡一会。

标签: delphi winapi multithreading


【解决方案1】:

使用Process Explorer 检查文件上的锁。

【讨论】:

    【解决方案2】:

    我真的不认为这是相关的......但请尝试禁用 Window 的 Prefetch。由于我们正在操作的 Prefetch 锁定文件,我们遇到了很多麻烦,但那是在应用程序启动时。据我所知,Prefetch 应该只在系统启动和应用程序启动时读取文件(取决于当前配置值),但在创建新线程时可能也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-26
      • 2022-07-17
      • 2021-02-16
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      相关资源
      最近更新 更多