Inno setup innosetup错误,在初始化之前展开常量
当我运行innosetup代码时,我返回以下错误:在初始化“app”常量之前,尝试展开该常量。 我不知道把我的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
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。这是错误的?好吧,现在你有一个问题要问:“处理下一步按钮点击自定义页面”。