1
[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 'GetLocalTime@kernel32.dll';

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;
end;

これは私が必要としていたもので、有効期限のあるインストーラーでした。このコードを追加しました。日付が過ぎてメッセージが表示されると機能しますが、日付が有効な場合は機能せず、インストーラーを起動しません。

次のメッセージが表示されます。InitializeSetup は False を返しました。中止しています。EAbort 例外が発生しました。セットアップの初期化を解除しています。***セットアップ終了コード: 1

手伝って頂けますか?ありがとう

4

2 に答える 2

3

スクリプトに InitializeSetup が存在する場合、結果のデフォルト値はfalseです。つまり、インストーラーを続行したい場合は、結果の値を明示的にtrueに設定する必要があります。

また、コードを簡素化し、組み込みの日付ルーチン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('Now it''s forbidden to install this program', mbError, MB_OK);
end;
于 2013-11-12T21:31:42.087 に答える