inline std::wstring GetTimeStampByNameW()
{
 std::wstring strReturn;

 // 실행 파일 생성 시각 얻기.
 HANDLE hFile;
 HANDLE hFMap;
 wchar_t szFileName[MAX_PATH];
 ::GetModuleFileNameW(NULL, szFileName, MAX_PATH);
 hFile = CreateFileW( szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

 if( hFile == INVALID_HANDLE_VALUE )
 {
  return strReturn;
 }

 // 파일 맵핑 오브젝트를 만든다.
 hFMap = CreateFileMappingW( hFile, NULL, PAGE_READONLY, 0, 0, NULL );
 // 주소 공간에 맵한다.
 HMODULE hModule;
 hModule = ( HMODULE )MapViewOfFile( hFMap, FILE_MAP_READ, 0, 0, 0 );
 CTime time( GetTimestampForLoadedLibrary( hModule ) );

 strReturn = (CStringW)time.Format( _T("%Y-%m-%d %H:%M:%S") );

 UnmapViewOfFile( hModule );
 CloseHandle( hFMap );
 CloseHandle( hFile );

 return strReturn;
}

inline CTime GetTimeStamp()
{
 // 실행 파일 생성 시각 얻기.
 HANDLE hFile;
 HANDLE hFMap;
 wchar_t szFileName[MAX_PATH];
 ::GetModuleFileNameW(NULL, szFileName, MAX_PATH);
 hFile = CreateFileW( szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

 if( hFile == INVALID_HANDLE_VALUE )
 {
  return CTime();
 }

 // 파일 맵핑 오브젝트를 만든다.
 hFMap = CreateFileMappingW( hFile, NULL, PAGE_READONLY, 0, 0, NULL );
 // 주소 공간에 맵한다.
 HMODULE hModule;
 hModule = ( HMODULE )MapViewOfFile( hFMap, FILE_MAP_READ, 0, 0, 0 );
 CTime time( GetTimestampForLoadedLibrary( hModule ) );

 UnmapViewOfFile( hModule );
 CloseHandle( hFMap );
 CloseHandle( hFile );

 return time;
}



윈도우 탐색기에 나오는 만든날짜 수정한 날짜 같은건 도무지 믿을 수가 없다.
실행파일이 생성될 때 링커가 남기는 빌드타임을 얻어올 수 있다.
이걸로 실행파일 갱신 여부 확인 및 최신버전 확인을 하는 것이 가장 듬직한 방법.
Posted by leafbird 트랙백 0 : 댓글 1