2015-07-11 3 views
-4

У меня есть исполняемый файл Windows, который я установил на машине. Есть ли способ или API для получения метки времени, когда исполняемый файл был установлен на этой машине. Я не прошу создать временную метку создания/изменения/доступа к этому exe, но время, когда exe был установлен на конкретной машине. Кроме того, exe был установлен в системной папке Windows.Исполняемое время установки

+0

Возможно, есть запись в реестре. –

+7

Определите «установленный». –

+0

Установленное время означает, что exe был скопирован на машине. – user3364310

ответ

0

enter image description here

Вы можете использовать FileTimeToSystemTime(), чтобы получить дату и время, когда файл или каталог был создан.

#include <windows.h> 
#include <stdio.h> 

int main(){ 

    // a file handle 
    HANDLE hFile1; 
    FILETIME ftCreate, ftAccess, ftWrite; 
    SYSTEMTIME stUTC, stLocal, stUTC1, stLocal1, stUTC2, stLocal2; 

    // a filename, 
    char fname1[ ] = "c:\\windows\\explorer.exe"; 

    // temporary storage for file sizes 
    DWORD dwFileSize; 
    DWORD dwFileType; 

    // opening the existing file 
    hFile1 = CreateFile(fname1,    // file to open 
        GENERIC_READ,    // open for reading 
        FILE_SHARE_READ,   // share for reading 
        NULL,          // default security 
        OPEN_EXISTING,    // existing file only 
        FILE_ATTRIBUTE_NORMAL, // normal file 
        NULL);           // no attribute template 

    if(hFile1 == INVALID_HANDLE_VALUE){ 
     printf("Could not open %s file, error %d\n", fname1, GetLastError()); 
     return 4; 
    } 

    dwFileType = GetFileType(hFile1); 
    dwFileSize = GetFileSize(hFile1, NULL); 
    printf("%s size is %d bytes and file type is %d\n", fname1, dwFileSize, dwFileType); 

    // retrieve the file times for the file. 
    if(!GetFileTime(hFile1, &ftCreate, &ftAccess, &ftWrite)){ 
     printf("Something wrong lol!\n"); 
      return FALSE; 
    } 

    // convert the created time to local time. 
    FileTimeToSystemTime(&ftCreate, &stUTC); 
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal); 

    // convert the last-access time to local time. 
    FileTimeToSystemTime(&ftAccess, &stUTC1); 
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC1, &stLocal1); 

    // convert the last-write time to local time. 
    FileTimeToSystemTime(&ftWrite, &stUTC2); 
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC2, &stLocal2); 

    // build a string showing the date and time. 
    printf("\nCreated on: %02d/%02d/%d %02d:%02d\n", stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, stLocal.wMinute); 
    printf("Last accessed: %02d/%02d/%d %02d:%02d\n", stLocal1.wDay, stLocal1.wMonth, stLocal1.wYear, stLocal1.wHour, stLocal1.wMinute); 
    printf("Last written: %02d/%02d/%d %02d:%02d\n\n", stLocal2.wDay, stLocal2.wMonth, stLocal2.wYear, stLocal2.wHour, stLocal2.wMinute); 

    // close the file's handle and itself 
    CloseHandle(hFile1); 
return 0; 
} 
+0

У меня создалось впечатление, что созданное время - это время, когда файл был первоначально создан на главной машине сборки, но выглядит, если я создаю exe в X раз, но скопировал exe в Y раз на машине M, а затем создал время файл на машине M будет временем Y. Это верно? – user3364310

+0

Да, если вы скопируете exe в другое место, тогда он получит новую временную метку. Я обновил код. он показывает дату создания, когда он был последним, и когда он был изменен. –

+0

Отлично. Благодарю . – user3364310

Смежные вопросы