Inno setup innosetup错误,在初始化之前展开常量

Inno setup innosetup错误,在初始化之前展开常量,inno-setup,Inno Setup,当我运行innosetup代码时,我返回以下错误:在初始化“app”常量之前,尝试展开该常量。 我不知道把我的NextButtonClick功能放在哪里来解决它。 谢谢大家 这是我的代码: [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To gene

当我运行innosetup代码时,我返回以下错误:在初始化“app”常量之前,尝试展开该常量。 我不知道把我的
NextButtonClick
功能放在哪里来解决它。 谢谢大家

这是我的代码:

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{D174BFCA-6A75-445D-996B-41DD6992B73B}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=auto
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=C:\Users\aartoni\Documents\innosetup\progetti\MRV\Output
OutputBaseFilename=MRV_Setup
WizardSmallImageFile=C:\Users\aartoni\Documents\innosetup\smallimage_x32.bmp
SetupIconFile=C:\Users\aartoni\Documents\innosetup\setup_icon.ico
Compression=lzma/normal
SolidCompression=no
PrivilegesRequired=admin

[Files]
Source: "C:\Users\aartoni\Documents\innosetup\progetti\MRV\bin\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs; Permissions: everyone-full
Source: "C:\Users\aartoni\Documents\innosetup\progetti\MRV\DB\*"; DestDir: "{app}\DB"; Flags: ignoreversion createallsubdirs recursesubdirs; Permissions: everyone-full
Source: "Files\speech.tlb"; DestDir: "{syswow64}"; Flags: ignoreversion  regtypelib
Source: "Files\midas.dll"; DestDir: "{syswow64}"; Flags: ignoreversion regserver
Source: "Files\MSVCR71.dll"; DestDir: "{syswow64}"; Flags: ignoreversion
Source: "Files\PrjBridgeMrv.dll"; DestDir: "{app}"; Flags: ignoreversion regserver
;Source: "Files\Con Firmax64\KpkiCOM_Lock_2.0\KpkiCOM_lock.dll"; DestDir: "{syswow64}"; Flags: ignoreversion 32bit regserver; Components: FIRMA
;Source: "Files\Con Firmax64\KpkiCOM_Lock_2.0\SC_ATR.KPKI"; DestDir: "{syswow64}"; Flags: ignoreversion; Components: FIRMA

[Dirs]
Name: {app}; Permissions: everyone-full
Name: "{app}\Config"
Name: "{app}\Log"

[Registry]
; Imported Registry File: "C:\Users\aartoni\Documents\innosetup\progetti\MRV\Files\mrv_registry.reg"
Root: "HKLM"; Subkey: "SOFTWARE\Wow6432Node\ANDRA\MRV"; ValueType: string; ValueName: "ConfigFile"; ValueData: "ConfigFile.ini"; Flags: uninsdeletekey; Permissions: everyone-full
Root: "HKLM"; Subkey: "SOFTWARE\Wow6432Node\ANDRA\MRV"; ValueType: string; ValueName: "DirDefault"; ValueData: "C:\Program Files (x86)\MRV"; Flags: uninsdeletekey; Permissions: everyone-full
Root: "HKLM"; Subkey: "SOFTWARE\ANDRA\MRV"; ValueType: string; ValueName: "ConfigFile"; ValueData: "ConfigFile.ini"; Flags: uninsdeletekey
Root: "HKLM"; Subkey: "SOFTWARE\ANDRA\MRV"; ValueType: string; ValueName: "DirDefault"; ValueData: "C:\Program Files (x86)\MRV"; Flags: uninsdeletekey
Root: "HKCR"; Subkey: "Wow6432Node\CLSID\{{0F6C2140-F48F-4576-90EB-5D5D1BEDC58C}"; ValueType: string; ValueData: "BridgeMRV Object"; Flags: uninsdeletekey
Root: "HKCR"; Subkey: "Wow6432Node\CLSID\{{0F6C2140-F48F-4576-90EB-5D5D1BEDC58C}"; ValueType: string; ValueName: "AppID"; ValueData: "{{0F6C2140-F48F-4576-90EB-5D5D1BEDC58C}"; Flags: uninsdeletekey
Root: "HKCR"; Subkey: "Wow6432Node\AppID\{{0F6C2140-F48F-4576-90EB-5D5D1BEDC58C}"; ValueType: string; ValueName: "DllSurrogate"; Flags: uninsdeletekey
Root: "HKLM"; Subkey: "SOFTWARE\Classes\AppID\{{0F6C2140-F48F-4576-90EB-5D5D1BEDC58C}"; ValueType: string; ValueName: "DllSurrogate"; Flags: uninsdeletekey

[Types]
Name: "Full"; Description: "Full installation (MRV client + database)"
Name: "Client"; Description: "MRV client installation"

[Components]
Name: "database"; Description: "Server db"; Types:  Full
Name: "dictation"; Description: "Dictation Options"; Types: Client

[Tasks]
Name: "voisis"; Description: "voisis"; Flags: checkablealone; Components: dictation
Name: "recomed"; Description: "recomed"; Flags: checkablealone; Components: dictation

[Code]

var
      Page0: TInputQueryWizardPage;
      Page1: TInputDirWizardPage;


procedure InitializeWizard;
begin
 { Create the pages }

  Page0 := CreateInputQueryPage(wpSelectComponents,'SQL Informations', '','Please specify Server and Instance name , then click Next.');

      Page0.Add('Server:', False);
      Page0.Add('Instance:', False);
      Page0.Add('SQL User:', False);
      Page0.Add('SQL Password:', True);
      Page0.Values[0] := ('localhost');
      Page0.Values[1] := ('WISE');
      Page0.Values[2] := ('sa');
      Page0.Values[3] := ('SectraPACS'); 

      Page1 := CreateInputDirPage(Page0.ID,'Select MRV Database files Location', '','MRV DB data files will be stored in the following folder.'#13#10#13#10 +'To continue, click Next. ' +'If you would like to select a different folder, click Browse.',False, 'New Folder');
      Page1.Add('Database Folder');
      Page1.Values[0] := ExpandConstant('{pf}\MRV\DB\');   


end;

function NextButtonClick(CurPageID: Integer): Boolean;

var
      ResultCode: Integer;
      Params: string;
      ScriptPath: string;
      DBPath: string;
      Server: String;
      Instance: String;
      SQL_User: String; 
      SQL_Password: String;

begin

      DBPath := Page1.Values[0];
      Server:= Page0.Values[0];
      Instance:= Page0.Values[1];
      SQL_User:= Page0.Values[2]; 
      SQL_Password:= Page0.Values[3];
      ScriptPath := ExpandConstant('"{app}\DB\install_db_2.30.0.sql"');
      Params := '-v MRVDATA="'+DBPath+'" MRVINDEX="'+DBPath+'" MRVLOG="'+DBPath+'" -S '+Server+'\'+Instance+' -U '+SQL_User+' -P '+SQL_Password+' -i '+ScriptPath+' -o "'+DBPath+'\log.txt"' ;

      if not DirExists(DBPath) then  begin    CreateDir(DBPath);

end;

      if  MsgBox('' + Params + '', mbInformation, mb_YesNo) = idYes then
        if CurPageID = Page1.ID then
begin 
        Exec ('sqlcmd',Params, '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
      Exit;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;

begin

    Result := False;

  if (Page0.ID=PageID) or (Page1.ID=PageID) then

    Result := not IsComponentSelected('database'); 
end;

我相信您只想在“选择目的地位置”页面的
NextButtonClick
中执行代码。为此,您需要测试
CurPageID
参数的值:

函数NextButtonClick(CurPageID:Integer):布尔;
{ ... }
开始
如果CurPageID=wpSelectDir,则
开始
{您的代码}
结束;
结果:=真;
结束;

NextButtonClick
用于所有页面。必须测试
CurPageID
参数以限制特定页面的处理

在这种情况下,由于您似乎正在捕获与两个自定义页面相关的值,因此您可能至少应该将处理延迟到
Page1
之后——因此您应该检查
CurPageID=Page1.ID
,这已在代码的其他部分中演示过

还有另一种选择——您可以声明特定于页面的
NextButtonClick
处理程序,而不是全局处理程序。你可以在网站上看到一个例子


综上所述,如果您试图做的事情实际上改变了用户的系统(看起来很有可能),那么在向导执行过程中,在
NextButtonClick
中做这件事首先是完全错误的

该向导应仅用于收集和验证安装参数。在用户同意通过单击“安装”按钮实际开始安装之前,您不应该实际开始安装任何东西


在这种情况下,您应该将代码放入
preparetoall
函数中。或者,如果它需要预先安装一些
[文件]
,那么您应该将其放入
CurStepChanged
,条件是
CurStep=ssPostInstall

请参见。我尝试将{app}替换为“C:\”对于测试,我意识到真正的问题不是变量,而是NextButtonClick代码和我不理解的WARE是错误的。因此,编辑您的问题以询问您当前的问题。在评论中,您现在提出的问题与您在此处提出的问题完全不同。如果您有新问题,请使用页面顶部的“提问”按钮,并在那里提问。您现在无法更改此页,因为您已经得到了答案。我需要在第1页的下一个按钮单击中执行我的代码。我不知道第1页是什么。在过程初始化之后,我创建了2页。page0=CreateInputQueryPage和Page1=CreateInputDirPage。我需要在第1页运行我的代码。我想page1的页面id是page1。这是错误的?好吧,现在你有一个问题要问:“处理下一步按钮点击自定义页面”。