首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WriteFIle冻结

WriteFIle冻结
EN

Stack Overflow用户
提问于 2013-11-22 12:33:51
回答 1查看 410关注 0票数 0

当下一个字符串从远程目录运行时,我的程序就会冻结。

代码语言:javascript
复制
::WriteFile(dst, ::LockResource(resource_data), resource_size, &written_size, NULL);

所有参数都是正确的,输出文件位于%TEMP%中。看起来,安全策略拒绝写入文件,但是系统没有显示任何有关这方面的通知。

如果程序从本地目录运行,同样的代码也能正常工作。

我在MSDN上没有发现关于这个案子的任何信息。

UPD: SSCCE.

代码语言:javascript
复制
bool ExtractResourceTo(const std::wstring& filename) {
  CHandle file(::CreateFile(filename.c_str(), GENERIC_WRITE, 0, 0,
                            CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  if (INVALID_HANDLE_VALUE == file) {
    LOG("Cannot create file.");
    return false;
  }
  const HINSTANCE instance = _AtlBaseModule.GetModuleINstance();
  HRSRC resource = ::FindResource(instance, kResourceName,
                                  RT_RCDATA);
  if (resource) {
    HGLOBAL resource_data = ::LoadResource(instance, resource);
    DWORD resource_size = ::SizeofResource(instance, resource);
    if (resource_data && resource_size > 0) {
      DWORD written_size;
      LPVOID resource_ptr = ::LockResource(resource_data);
      if (!resource_ptr) {
        LOG("Cannot lock resource.");
        return false;
      }
      ::WriteFile(file, resource_ptr, resource_size,
                  &written_size, NULL);
      if (written_size == resource_size) {
        return true;
      }
      LOG("Write failed.");
    }
  }
  return false;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-23 13:43:52

这似乎是窗口的“优化”。系统启动进程,不会立即加载资源。当WriteFile试图访问资源时,系统会暂停线程并将给定的资源读取到内存中,但是可执行文件在远程机器上,下载资源需要很长时间,因为我的资源已经接近180 my。

感谢所有试图解决我问题的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20145040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档