Inno setup 如何在Inno安装程序中生成过期日期的代码?

Inno setup 如何在Inno安装程序中生成过期日期的代码?,inno-setup,Inno Setup,这就是我需要的,一个有有效期的安装程序。我添加了这段代码:它在日期已过并给出消息时工作,但在日期有效时不启动安装程序 传达了以下信息: InitializeSetup返回False;流产。 有一个例外。 取消初始化设置。 ***安装程序退出代码:1 你能帮我吗?谢谢当脚本中存在InitializeSetup时,result的默认值为false,即如果希望安装程序继续,则必须将result值显式设置为true 我还建议您简化代码并使用内置的日期例程GetDateTimeString。下面的代码应该

这就是我需要的,一个有有效期的安装程序。我添加了这段代码:它在日期已过并给出消息时工作,但在日期有效时不启动安装程序

传达了以下信息: InitializeSetup返回False;流产。 有一个例外。 取消初始化设置。 ***安装程序退出代码:1


你能帮我吗?谢谢

当脚本中存在InitializeSetup时,result的默认值为false,即如果希望安装程序继续,则必须将result值显式设置为true

我还建议您简化代码并使用内置的日期例程GetDateTimeString。下面的代码应该可以完成这项工作。希望这有帮助

[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;
[代码]
const MY_expiration_DATE_STR='20131112'//日期格式:yyyymmdd
函数InitializeSetup():Boolean;
开始
//如果当前日期超过我的到期日期,则返回false并退出安装程序。

结果:=CompareStr(GetDateTimeString('yyyyymmdd',#0,#0),MY_EXPIRY_DATE_STR)当脚本中存在InitializeSetup时,结果的默认值为false,即如果希望安装程序继续,则必须将结果值显式设置为true

我还建议您简化代码并使用内置的日期例程GetDateTimeString。下面的代码应该可以完成这项工作。希望这有帮助

[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;
[代码]
const MY_expiration_DATE_STR='20131112'//日期格式:yyyymmdd
函数InitializeSetup():Boolean;
开始
//如果当前日期超过我的到期日期,则返回false并退出安装程序。

结果:=CompareStr(GetDateTimeString('yyyyymmdd',#0,#0),MY#u EXPIRY_DATE_STR)在IDE中运行安装程序时会收到该消息,
InitializeSetup()
事件函数返回false。
这不会影响已编译的安装程序。

在IDE中运行安装程序时会收到该消息,
InitializeSetup()
事件函数返回false。
这不会影响已编译的设置。

请注意,向安装程序添加有效期很容易失败。我并不是说它一文不值,但您不应该依赖它来进行许可/试用/测试。我更愿意删除不相关的代码,并将其拆分为“我返回false并得到一个EAbort错误”。有什么想法吗?如果任何答案有助于回答您的问题,请将其标记为已接受的答案。如果他们没有,请提供更多的信息,这样就可以了。请注意,在安装程序中添加有效期很容易失败。我并不是说它一文不值,但您不应该依赖它来进行许可/试用/测试。我更愿意删除不相关的代码,并将其拆分为“我返回false并得到一个EAbort错误”。有什么想法吗?如果任何答案有助于回答您的问题,请将其标记为已接受的答案。如果他们没有这样做,请提供更多信息,这样就可以了,我刚刚发布了一个对代码来源的更正。我刚刚发布了一个对代码来源的更正。