当下一个字符串从远程目录运行时,我的程序就会冻结。
::WriteFile(dst, ::LockResource(resource_data), resource_size, &written_size, NULL);所有参数都是正确的,输出文件位于%TEMP%中。看起来,安全策略拒绝写入文件,但是系统没有显示任何有关这方面的通知。
如果程序从本地目录运行,同样的代码也能正常工作。
我在MSDN上没有发现关于这个案子的任何信息。
UPD: SSCCE.
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;
}发布于 2013-11-23 13:43:52
这似乎是窗口的“优化”。系统启动进程,不会立即加载资源。当WriteFile试图访问资源时,系统会暂停线程并将给定的资源读取到内存中,但是可执行文件在远程机器上,下载资源需要很长时间,因为我的资源已经接近180 my。
感谢所有试图解决我问题的人。
https://stackoverflow.com/questions/20145040
复制相似问题