0
當程序從遠程目錄運行時,我的程序會凍結下一個字符串。WriteFIle凍結
::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;
}
'resource_data'是一個有效的'HGLOBAL'? LockResource的返回值是什麼? 'dst'是一個有效的'HANDLE'?爲了改進答案,您可能需要提供一個暴露此問題的[SSCCE](http://sscce.org)。 – IInspectable
是的,'resource_data','dst'和'LockResource()'的返回值是有效的。我會在一兩個小時內提供一個SSCCE。 –
這不是一個SSCCE。它不會編譯。我們無法運行它。我們仍然不知道'dst'是什麼。如果你從不使用它,看起來你創建一個文件的意義不大。我們沒有證據證明'LockResource'成功。 –