2012-11-04 59 views
1

請讓我知道如何檢查安裝過程中的當前日期。如何在特定日期到期時停止Inno-Setup安裝程序?

我有嵌入在安裝程序腳本特定的日期,並且然後通知用戶,並且如果當前的日期(從Windows主機截取)比硬編碼(嵌入的)日期

更大停止安裝過程

謝謝

+3

請注意,如果這是用於試用軟件的事情,這很容易被打敗。相反,您應該在應用程序中保護自己。 – Miral

+0

有日期檢查是完全有效的。帶有支票的軟件(這很容易打敗)和沒有任何東西的軟件之間的區別遠遠大於帶有難以擊敗的支票的軟件和易於擊敗的軟件。 –

回答

1

您必須使用Windows API獲取系統日期/時間,例如使用GetLocalTime函數,並將其與您的安裝程序中某處的硬編碼日期進行比較,例如在初始化過程中,就像我在此執行的那樣例如:

{lang:pascal}

[Code] 
type 
    TSystemTime = record 
    wYear: Word; 
    wMonth: Word; 
    wDayOfWeek: Word; 
    wDay: Word; 
    wHour: Word; 
    wMinute: Word; 
    wSecond: Word; 
    wMilliseconds: Word; 
    end; 

procedure GetLocalTime(var lpSystemTime: TSystemTime); external '[email protected]'; 

function DateToInt(ATime: TSystemTime): Cardinal; 
begin 
    //Converts dates to a integer with the format YYYYMMDD, 
    //which is easy to understand and directly comparable 
    Result := ATime.wYear * 10000 + aTime.wMonth * 100 + aTime.wDay; 
end; 


function InitializeSetup(): Boolean; 
var 
    LocTime: TSystemTime; 
begin 
    GetLocalTime(LocTime); 
    if DateToInt(LocTime) > 20121001 then //(10/1/2012) 
    begin 
    Result := False; 
    MsgBox('Now it''s forbidden to install this program', mbError, MB_OK); 
    end 
    else 
    begin 
    Result := True; 
    end; 
end; 
4

使用Inno的內置日期例程的替代解決方案GetDateTimeString

[Code] 

const MY_EXPIRY_DATE_STR = '20131112'; //Date format: yyyymmdd 

function InitializeSetup(): Boolean; 
begin 
    //If current date exceeds MY_EXPIRY_DATE_STR then return false and exit Installer. 
    result := CompareStr(GetDateTimeString('yyyymmdd', #0,#0), MY_EXPIRY_DATE_STR) <= 0; 

    if not result then 
    MsgBox('This Software is freshware and the best-before date has been exceeded. The Program will not install.', mbError, MB_OK); 
end; 
相關問題