//
HANDLE sameApp = CreateMutex(NULL, TRUE, uniqName.c_str());
//
if (sameApp == NULL)
return static_cast(logMsg("CreateMutex() failed", GetLastError()));
//
Guard sameAppGuarded([=]() { CloseHandle(sameApp); });
// , (GetLastError() ERROR_ALREADY_EXISTS) -
if (GetLastError() == ERROR_ALREADY_EXISTS)
if (WaitForSingleObject(sameApp, INFINITE) != WAIT_OBJECT_0) //
//
return static_cast(logMsg("Recursive run detected for " + name.filename().string(), GetLastError()));
// ,
Guard sameAppLocked([=]() { ReleaseMutex(sameApp); });
// , /
{
SECURITY_ATTRIBUTES attr = { sizeof(attr), NULL, TRUE };
//
HANDLE hIn = CreateFile((newName.parent_path() / "stdin.txt").string().c_str(),
FILE_GENERIC_READ, FILE_SHARE_DELETE,&attr, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
//
Guard hInGuarded ([=]() { CloseHandle(hIn); });
/* ,
*/
}
// , / .
// , ,