2011-07-06 32 views
3

所以我试图建立一个名为DXX-Rebirth的源端口的安装程序。我编译了它,当我运行时,在语言选择对话框后出现“无法调用proc”错误。错误指向函数Descent。这里是我的.iss文件:Inno安装程序无法调用proc错误?

; Script generated by the Inno Setup Script Wizard. 
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 

#define MyAppName "DXX-Rebirth" 
#define MyAppName1 "D1X-Rebirth" 
#define MyAppName2 "D2X-Rebirth" 
#define MyAppVersion "0.57.0" 
#define MyAppURL "http://www.dxx-rebirth.com/" 
#define MyAppExeName "d1x-rebirth.exe" 
#define MyAppExeName2 "d2x-rebirth.exe" 

[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={{DF665ED8-D2A7-490A-805F-6677EFFBAB40} 
AppName={#MyAppName} 
AppVersion={#MyAppVersion} 
;AppVerName={#MyAppName} {#MyAppVersion} 
AppPublisherURL={#MyAppURL} 
AppSupportURL={#MyAppURL} 
AppUpdatesURL={#MyAppURL} 
DefaultDirName={pf}\{#MyAppName} 
DefaultGroupName={#MyAppName} 
OutputBaseFilename=Setup 
Compression=lzma 
SolidCompression=yes 

[Languages] 
Name: "english"; MessagesFile: "compiler:Default.isl" 
Name: "german"; MessagesFile: "compiler:Languages\German.isl" 

[Tasks] 
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked 
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked 

[Types] 
Name: "install"; Description: "DXX-Rebirth"; Flags: iscustom 

[Components] 
Name: "d1x"; Description: "D1X"; Types: install 
Name: "d2x"; Description: "D2X"; Types: install 

[Files] 
;D1X Files 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\d1x-rebirth.exe"; DestDir: "{app}\D1X-Rebirth"; Components: d1x; Flags: ignoreversion 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\*"; DestDir: "{app}\D1X-Rebirth"; Excludes: "C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Missions,C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Players,C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Demos,C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Screenchots"; Components: d1x; Flags: ignoreversion recursesubdirs createallsubdirs 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Missions"; DestDir: "{app}\D1X-Rebirth"; Components: d1x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Players"; DestDir: "{app}\D1X-Rebirth"; Components: d1x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Demos"; DestDir: "{app}\D1X-Rebirth"; Components: d1x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d1x-rebirth_v0.57-win\d1x-rebirth_v0.57-win\Screenshots"; DestDir: "{app}\D1X-Rebirth"; Components: d1x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
;D1 Main Files 
Source: "{code:Descent}\descent.hog"; DestDir: "{app}\D1X-Rebirth"; Components: "d1x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\descent.pig"; DestDir: "{app}\D1X-Rebirth"; Components: "d1x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
;D1 Missions 
Source: "{code:Descent}\*.hog"; DestDir: "{app}\D1X-Rebirth\Missions"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\*.msn"; DestDir: "{app}\D1X-Rebirth\Missions"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\*.rdl"; DestDir: "{app}\D1X-Rebirth\Missions"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\Missions\*"; DestDir: "{app}\D1X-Rebirth\Missions"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
;D1 Players 
Source: "{code:Descent}\*.eff:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\*.plr:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\*.plx:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\*.ngp:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\*.sg*:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\*.mg*:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\Players\*.eff:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\Players\*.plr:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\Players\*.plx:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\Players\*.ngp:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\Players\*.sg*:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:Descent}\Players\*.mg*:"; DestDir: "{app}\D1X-Rebirth\Players"; Components: "d1x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
;D2X Files 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\d2x-rebirth.exe"; DestDir: "{app}\D2X-Rebirth"; Components: d2x; Flags: ignoreversion 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\*"; DestDir: "{app}\D2X-Rebirth"; Excludes: "C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Missions,C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Players,C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Demos,C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Screenshots"; Components: d2x; Flags: ignoreversion recursesubdirs createallsubdirs 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Missions"; DestDir: "{app}\D2X-Rebirth"; Components: d2x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Players"; DestDir: "{app}\D2X-Rebirth"; Components: d2x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Demos"; DestDir: "{app}\D2X-Rebirth"; Components: d2x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
Source: "C:\Documents and Settings\Owner\Desktop\Downloads\d2x-rebirth_v0.57-win\d2x-rebirth_v0.57-win\Screenshots"; DestDir: "{app}\D2X-Rebirth"; Components: d2x; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist 
;D2 Main Files 
Source: "{code:DescentTwo}\descent2.ham"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\descent2.hog"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\descent2.s11"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\descent2.s22"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\alien1.pig"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\alien2.pig"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\fire.pig"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\groupa.pig"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\ice.pig"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\water.pig"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\intro-h.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\intro-l.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\other-h.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\other-l.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\robots-h.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\robots-l.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
;Vertigo 
Source: "{code:DescentTwo}\d2x-h.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\d2x-l.mvl"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\hoard.ham"; DestDir: "{app}\D2X-Rebirth"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\d2x.hog"; DestDir: "{app}\D2X-Rebirth\Missions"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\d2x.mn2"; DestDir: "{app}\D2X-Rebirth\Missions"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Missions\d2x.hog"; DestDir: "{app}\D2X-Rebirth\Missions"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Missions\d2x.mn2"; DestDir: "{app}\D2X-Rebirth\Missions"; Components: "d2x"; Check: not DontInstall; Flags: external skipifsourcedoesntexist 
;D2 Missions 
Source: "{code:DescentTwo}\*.hog"; DestDir: "{app}\D2X-Rebirth\Missions"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\*.mn2"; DestDir: "{app}\D2X-Rebirth\Missions"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Missions\*"; DestDir: "{app}\D2X-Rebirth\Missions"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
;D2 Players 
Source: "{code:DescentTwo}\*.eff:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\*.plr:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\*.plx:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\*.ngp:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\*.sg*:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\*.mg*:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Players\*.eff:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Players\*.plr:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Players\*.plx:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Players\*.ngp:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Players\*.sg*:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
Source: "{code:DescentTwo}\Players\*.mg*:"; DestDir: "{app}\D2X-Rebirth\Players"; Components: "d2x"; Check: InstallAll; Flags: external skipifsourcedoesntexist 
; NOTE: Don't use "Flags: ignoreversion" on any shared system files 

[Icons] 
Name: "{group}\{#MyAppName1}"; Filename: "{app}\D1X-Rebirth\{#MyAppExeName}" 
Name: "{group}\{#MyAppName2}"; Filename: "{app}\D2X-Rebirth\{#MyAppExeName2}" 
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" 
Name: "{commondesktop}\{#MyAppName1}"; Filename: "{app}\D1X-Rebirth\{#MyAppExeName}"; Tasks: desktopicon 
Name: "{commondesktop}\{#MyAppName2}"; Filename: "{app}\D2X-Rebirth\{#MyAppExeName2}"; Tasks: desktopicon 
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName1}"; Filename: "{app}\D1X-Rebirth\{#MyAppExeName}"; Tasks: quicklaunchicon 
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName2}"; Filename: "{app}\D2X-Rebirth\{#MyAppExeName2}"; Tasks: quicklaunchicon 

[Run] 
Filename: "{app}\D1X-Rebirth\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName1, "&", "&&")}}"; Flags: nowait postinstall skipifsilent unchecked 
Filename: "{app}\D2X-Rebirth\{#MyAppExeName2}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName2, "&", "&&")}}"; Flags: nowait postinstall skipifsilent unchecked 

[Code] 
// global vars 
var 
    SampleDataPage: TInputOptionWizardPage; 
    DataDirPage: TInputDirWizardPage; 

// custom wizard page setup, for data dir. 
procedure InitializeWizard; 
begin 
    { Taken from CodeDlg.iss example script } 
    { Create custom pages to show during install } 

    SampleDataPage := CreateInputOptionPage(wpSelectComponents, 
    'Install Descent Data', '', 
    'Would you like to copy the Descent game files to your DXX-Rebirth installation?', 
    True, False); 
    SampleDataPage.Add('Yes copy the game files, missions, players, and savegames.'); 
    SampleDataPage.Add('Yes, but just copy the game files.'); 
    SampleDataPage.Add('No, I'+chr(39)+'ll copy the game files myself later.'); 

    SampleDataPage.Values[0] := True; 

    DataDirPage := CreateInputDirPage(SampleDataPage.ID, 
    'Descent Data Directory', '', 
    'Please select the location where the original Descent files are installed.', 
    False, ''); 
    DataDirPage.Add('Descent location.'); 
    DataDirPage.Add('Decent 2 location.'); 

    DataDirPage.Values[0] := ExpandConstant('{pf}\GOG.com\Descent and Descent 2\Descent'); 
    DataDirPage.Values[1] := ExpandConstant('{pf}\GOG.com\Descent and Descent 2\Descent 2'); 

end; 

function InstallAll(): Boolean; 
begin 
    { Return the value of the 'install' radiobutton } 
    //MsgBox('InstallSampleData.', mbError, MB_OK); 
    Result := SampleDataPage.Values[0]; 
end; 

function Install(): Boolean; 
begin 
    { Return the value of the 'install' radiobutton } 
    //MsgBox('InstallSampleData.', mbError, MB_OK); 
    Result := SampleDataPage.Values[1]; 
end; 

function DontInstall(): Boolean; 
begin 
    Result := SampleDataPage.Values[2]; 
end; 

function Descent(Param: String): String; 
begin 
    { Return the selected DataDir } 
    //MsgBox('GetDataDir.', mbError, MB_OK); 
    Result := DataDirPage.Values[0]; 
end; 

function DescentTwo(Param: String): string; 
begin 
    { Return the selected DataDir } 
    //MsgBox('GetDataDir.', mbError, MB_OK); 
    Result := DataDirPage.Values[1]; 
end; 

在此先感谢! :)

+0

什么版本的InnoSetup使用? –

+0

我正在使用版本5.4.2 :) – John

+0

我可以通过删除'source:'行我没有的文件来重现。 –

回答

5

问题是执行顺序。

如果您逐句通过代码,您会发现在调用InitializeWizard之前执行{code:Descent}行,并因此DataDirPage未创建。

好消息是,代码也在安装时进行评估。

将代码更改为此应该使其工作。

function Descent(Param: String): String; 
begin 
    if Assigned(DataDirPage) then 
    result := DataDirPage.Values[0] 
    else 
    result := ''; 
end; 

function DescentTwo(Param: String): string; 
begin 
if Assigned(DataDirPage) then 
    result := DataDirPage.Values[1] 
    else 
    result := ''; 
end; 
相关问题