;AUTHOR: zhangsongtao@xx.com.cn
;DATE : 2007-06-04 - 2007-06-13
[Setup]
AppName=xx系统
AppVerName=xx系统 V2.0
AppPublisher=xx有限公司
AppPublisherURL=http://www.xx.com.cn
AppSupportURL=http://www.xx.com.cn
AppUpdatesURL=http://www.xx.com.cn
DefaultDirName= {code:GetInitPath}
DefaultGroupName=xx系统
DiskClusterSize = 512
LicenseFile=其它/协议声明.txt
OutputBaseFilename=xx_SetUp
SetupIconFile=其它/setup.ico
Compression=lzma
SolidCompression=yes
ExtraDiskSpaceRequired = 0
WindowVisible=yes
DisableProgramGroupPage=yes
ShowTasksTreeLines = yes
[Languages]
Name: "chinese"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "创建桌面快捷方式(&D)"; GroupDescription: "添加快捷方式:";
[Types]
Name:"full";Description:"完全安装"
Name:"custom";Description:"自定义安装";Flags:iscustom
[Components]
Name:"xx1";Description:"xx1";Types:full;ExtraDiskSpaceRequired:81920;Flags:disablenouninstallwarning
Name:"xx2设置";Description:"xx2设置";Types:full;ExtraDiskSpaceRequired:1933312;Flags:disablenouninstallwarning
Name:"xx3模块";Description:"xx3模块";Types:full;ExtraDiskSpaceRequired:2035712;Flags:disablenouninstallwarning
Name:"xx4模块";Description:"xx4模块";Types:full;ExtraDiskSpaceRequired:2179072;Flags:disablenouninstallwarning
Name:"xx5模块";Description:"xx5模块";Types:full;ExtraDiskSpaceRequired:3649536;Flags:disablenouninstallwarning
Name:"xx6模块";Description:"xx6模块";Types:full;ExtraDiskSpaceRequired:1908736;Flags:disablenouninstallwarning
Name:"xx7模块";Description:"xx7模块";Types:full;ExtraDiskSpaceRequired:1867776;Flags:disablenouninstallwarning
[Files]
Source: "FrameWork/dotnetfx.exe";DestDir: "{tmp}/FrameWork";Flags: ignoreversion promptifolder;AfterInstall:InstallFrame('{tmp}/FrameWork/dotnetfx.exe');
Source: "XX2/XX2.smf"; DestDir: "{app}/XX2模块"; Flags: ignoreversion promptifolder;Components:XX2
Source: "XX2/XX2.exe"; DestDir: "{app}/XX2模块"; Flags: ignoreversion promptifolder sortfilesbyextension;Components:XX2;AfterInstall:OpenFireWallAfterInstallSystem('{app}/XX2模块/XX2.exe');
Source: "Dll/mfc80u.dll";DestDir:"{app}/XX2模块";Flags:ignoreversion onlyifdoesntexist;Components:XX2
Source: "Dll/Microsoft.VC80.MFC.manifest";DestDir:"{app}/XX2模块";Flags:ignoreversion onlyifdoesntexist;Components:XX2
Source: "XX3系统/guide.smf"; DestDir: "{app}/XX3模块"; Flags: ignoreversion promptifolder;Components:XX3
Source: "XX3系统/XX3.exe"; DestDir: "{app}/XX3模块"; Flags: ignoreversion promptifolder sortfilesbyextension;Components:XX3;AfterInstall:OpenFireWallAfterInstallGuide('{app}/XX3模块/XX3.exe');
Source: "Dll/mfc80u.dll";DestDir:"{app}/XX3模块";Flags:ignoreversion onlyifdoesntexist;Components:XX3
Source: "Dll/Microsoft.VC80.MFC.manifest";DestDir:"{app}/XX3模块";Flags:ignoreversion onlyifdoesntexist;Components:XX3
Source: "XX4模块/XX4.smf"; DestDir: "{app}/XX4模块"; Flags: ignoreversion promptifolder;Components:XX4
Source: "XX4模块/BTPPrint.dll"; DestDir: "{app}/XX4模块"; Flags: ignoreversion promptifolder;Components:XX4
Source: "XX4模块/XX4.exe"; DestDir: "{app}/XX4模块"; Flags: ignoreversion promptifolder sortfilesbyextension;Components:XX4;AfterInstall:OpenFireWallAfterInstallSeafood('{app}/XX4模块/XX4.exe');
Source: "XX4模块/POSDLL.dll"; DestDir: "{app}/XX4模块"; Flags: ignoreversion promptifolder;Components:XX4
Source: "Dll/mfc80u.dll";DestDir:"{app}/XX4模块";Flags:ignoreversion onlyifdoesntexist;Components:XX4
Source: "Dll/Microsoft.VC80.MFC.manifest";DestDir:"{app}/XX4模块";Flags:ignoreversion onlyifdoesntexist;Components:XX4
Source: "XX1/caterServer.exe"; DestDir: "{sys}/CMSServer"; Flags: ignoreversion promptifolder;Components:cater_server;BeforeInstall:BeforeInstallServer('{sys}/CMSServer/caterServer.exe');AfterInstall:MyAfterInstall('{sys}/CMSServer/caterServer.exe');
Source: "XX5系统/POSDLL.dll"; DestDir: "{app}/XX5模块"; Flags: ignoreversion promptifolder;Components:XX5
Source: "XX5系统/account.smf"; DestDir: "{app}/XX5模块"; Flags: ignoreversion promptifolder;Components:XX5
Source: "XX5系统/XX5.exe"; DestDir: "{app}/XX5模块"; Flags: ignoreversion promptifolder sortfilesbyextension;Components:XX5;AfterInstall:OpenFireWallAfterInstallXX5('{app}/XX5模块/XX5.exe');
Source: "XX5系统/BTPPrint.dll"; DestDir: "{app}/XX5模块"; Flags: ignoreversion promptifolder;Components:XX5
Source: "Dll/mfc80u.dll";DestDir:"{app}/XX5模块";Flags:ignoreversion onlyifdoesntexist;Components:XX5
Source: "Dll/Microsoft.VC80.MFC.manifest";DestDir:"{app}/XX5模块";Flags:ignoreversion onlyifdoesntexist;Components:XX5
Source: "XX6系统/XX6.smf"; DestDir: "{app}/XX6模块"; Flags: ignoreversion promptifolder;Components:XX6
Source: "XX6系统/XX6.exe"; DestDir: "{app}/XX6模块"; Flags: ignoreversion promptifolder sortfilesbyextension;Components:XX6;AfterInstall:OpenFireWallAfterInstallXX6('{app}/XX6模块/XX6.exe');
Source: "Dll/mfc80u.dll";DestDir:"{app}/XX6模块";Flags:ignoreversion onlyifdoesntexist;Components:XX6
Source: "Dll/Microsoft.VC80.MFC.manifest";DestDir:"{app}/XX6模块";Flags:ignoreversion onlyifdoesntexist;Components:XX6
Source: "XX7系统/XX7.smf"; DestDir: "{app}/XX7模块"; Flags: ignoreversion promptifolder;Components:XX7
Source: "XX7系统/XX7.exe"; DestDir: "{app}/XX7模块"; Flags: ignoreversion promptifolder sortfilesbyextension;Components:XX7;AfterInstall:OpenFireWallAfterInstallHouse('{app}/XX7模块/XX7.exe');
Source: "Dll/mfc80u.dll";DestDir:"{app}/XX7模块";Flags:ignoreversion onlyifdoesntexist;Components:XX7
Source: "Dll/Microsoft.VC80.MFC.manifest";DestDir:"{app}/XX7模块";Flags:ignoreversion onlyifdoesntexist;Components:XX7
Source: "其它/CMS_HELP.doc"; DestDir: "{app}/其它"; Flags:ignoreversion sortfilesbyextension
Source: "其它/Readme.txt";DestDir: "{app}/其它"; Flags:isreadme
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
[INI]
Filename: "{app}/xx.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.xx.com.cn"
[Messages]
BeveledLabel=xx公司2007版权所有,保留所有权利.
[Registry]
Root:HKLM;SubKey:"Software/ODBC/ODBC.INI/CMS";Flags:deletevalue uninsdeletekey
Root:HKLM;SubKey:"Software/ODBC/ODBC.INI/CMS";ValueType:string;ValueName:"Driver";ValueData:"{sys}/sqlsrv32.dll";Flags:deletevalue uninsdeletekey
Root:HKLM;SubKey:"Software/ODBC/ODBC.INI/CMS";ValueType:string;ValueName:"LastUser";ValueData:"cmsuser";Flags:deletevalue uninsdeletekey
Root:HKLM;SubKey:"Software/ODBC/ODBC.INI/CMS";ValueType:string;ValueName:"Server";ValueData:{code:GetDataPage};Flags:deletevalue uninsdeletekey
Root:HKLM;SubKey:"Software/ODBC/ODBC.INI/ODBC Data Sources";ValueType:string;ValueName:"CMS";ValueData:"SQL Server";Flags:deletevalue uninsdeletevalue
Root:HKLM;SubKey:"Software/ODBC/ODBC.INI/CMS";ValueType:string;ValueName:"InitPath";ValueData:"{app}";Flags:deletevalue uninsdeletekey
Root:HKCU;SubKey:"Software/ODBC/ODBC.INI/CMS";Flags:deletevalue uninsdeletekey
Root:HKCU;SubKey:"Software/ODBC/ODBC.INI/CMS";ValueType:string;ValueName:"Driver";ValueData:"{sys}/sqlsrv32.dll";Flags:deletevalue uninsdeletekey
Root:HKCU;SubKey:"Software/ODBC/ODBC.INI/CMS";ValueType:string;ValueName:"LastUser";ValueData:"cmsuser";Flags:deletevalue uninsdeletekey
Root:HKCU;SubKey:"Software/ODBC/ODBC.INI/CMS";ValueType:string;ValueName:"Server";ValueData:{code:GetDataPage};Flags:deletevalue uninsdeletekey
Root:HKCU;SubKey:"Software/ODBC/ODBC.INI/ODBC Data Sources";ValueType:string;ValueName:"CMS";ValueData:"SQL Server";Flags:deletevalue uninsdeletevalue
[Icons]
Name: "{group}/{cm:UninstallProgram,xx系统}"; Filename: "{uninstallexe}"
Name: "{group}/{cm:ProgramOnTheWeb,xx有限公司}"; Filename: "{app}/xx.url"
Name: "{group}/xxx帮助文档"; Filename: "{app}/CMS_HELP.doc"; Flags:createonlyiffileexists;WorkingDir:"{app}"
Name: "{group}/XX2"; Filename: "{app}/XX2模块/XX2.exe"; Flags:createonlyiffileexists;WorkingDir:"{app}/XX2模块"
Name: "{group}/XX3模块"; Filename: "{app}/XX3模块/XX3.exe"; Flags:createonlyiffileexists;WorkingDir:"{app}/XX3模块"
Name: "{group}/XX4模块"; Filename: "{app}/XX4模块/XX4.exe"; Flags:createonlyiffileexists;WorkingDir:"{app}/XX4模块"
Name: "{group}/XX5模块"; Filename: "{app}/XX5模块/XX5.exe"; Flags:createonlyiffileexists ;WorkingDir:"{app}/XX5模块"
Name: "{group}/XX6模块"; Filename: "{app}/XX6模块/XX6.exe"; Flags:createonlyiffileexists;WorkingDir:"{app}/XX6模块"
Name: "{group}/XX7模块"; Filename: "{app}/XX7模块/XX7.exe"; Flags:createonlyiffileexists;WorkingDir:"{app}/XX7模块"
Name: "{userdesktop}/XX2"; Filename: "{app}/XX2模块/XX2.exe"; Tasks: desktopicon; Flags:createonlyiffileexists;WorkingDir:"{app}/XX2模块"
Name: "{userdesktop}/XX3模块"; Filename: "{app}/XX3模块/XX3.exe"; Tasks: desktopicon; Flags:createonlyiffileexists;WorkingDir:"{app}/XX3模块"
Name: "{userdesktop}/XX4模块"; Filename: "{app}/XX4模块/XX4.exe"; Tasks: desktopicon; Flags:createonlyiffileexists;WorkingDir:"{app}/XX4模块"
Name: "{userdesktop}/XX5模块"; Filename: "{app}/XX5模块/XX5.exe"; Tasks: desktopicon; Flags:createonlyiffileexists ;WorkingDir:"{app}/XX5模块"
Name: "{userdesktop}/XX6模块"; Filename: "{app}/XX6模块/XX6.exe"; Tasks: desktopicon; Flags:createonlyiffileexists ;WorkingDir:"{app}/XX6模块"
Name: "{userdesktop}/XX7模块"; Filename: "{app}/XX7模块/XX7.exe"; Tasks: desktopicon; Flags:createonlyiffileexists;WorkingDir:"{app}/XX7模块"
[UninstallDelete]
Type: files; Name: "{app}/xx.url"
Type: filesandordirs; Name: "{sys}/CMSServer";
Type: filesandordirs; Name: "{app}";
[Code]
{安装XX1程序前先停止服务}
var
ErrorCodes: Integer;
procedure BeforeInstallServer(FileName:string);
begin
ShellExec('open','sc','stop CMSserver','',SW_HIDE,ewNoWait,ErrorCodes);
Sleep(2000);
ShellExec('open','sc','delete CMSserver','',SW_HIDE,ewNoWait,ErrorCodes);
Sleep(1000);
end;
{安装XX1程序后启动服务及打开防火墙允许程序通过}
var
ErrorCode: Integer;
procedure MyAfterInstall(FileName:string);
var
sPathServerExe: string;
sPathServer: string;
sPathServerFirewall: string;
begin
sPathServerExe := ExpandConstant('"{sys}/CMSServer/caterServer.exe"');
sPathServerExe := 'create CMSserver binpath= ' + sPathServerExe;
sPathServer := ExpandConstant('"{sys}/CMSServer/"');
sPathServerFirewall := ExpandConstant('"{sys}/CMSServer/caterServer.exe"');
sPathServerFirewall := 'firewall set allowedprogram ' + sPathServerFirewall + ' CMSServer ENABLE';
ShellExec('open','sc',sPathServerExe,sPathServer,SW_HIDE,ewNoWait,ErrorCode);
Sleep(1000);
ShellExec('open','sc','config CMSserver depend= MSSQLSERVER','',SW_HIDE,ewNoWait,ErrorCode);
Sleep(1000);
ShellExec('open','sc','config CMSserver start= auto','',SW_HIDE,ewNoWait,ErrorCode);
Sleep(1000);
ShellExec('open','sc','start CMSserver','',SW_HIDE,ewNoWait,ErrorCode);
Sleep(2000);
ShellExec('open','netsh','firewall set portopening TCP 1433 SQLServer ENABLE','',SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
ShellExec('open','netsh',sPathServerFirewall,sPathServer,SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
//用于判断是否已经安装过该模块
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS','ServerFlag','001server');
end;
{XX2模块安装时,在防火墙中设置为例外程序}
procedure OpenFireWallAfterInstallSystem(FileName:string);
var
sPathSysSet: string;
sPathSysSetExe: string;
begin
sPathSysSetExe := ExpandConstant('"{app}/XX2模块/XX2.exe"');
sPathSysSetExe := 'firewall set allowedprogram ' + sPathSysSetExe + ' CMSXX2 ENABLE';
sPathSysSet := ExpandConstant('"{app}/XX2模块/"');
ShellExec('open','netsh',sPathSysSetExe,sPathSysSet,SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
//用于判断是否已经安装过该模块
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS','SysSetFlag','002sysset');
end;
{XX3模块安装时,在防火墙中设置为例外程序}
procedure OpenFireWallAfterInstallGuide(FileName:string);
var
sPathGuide: string;
sPathGuideExe: string;
begin
sPathGuideExe := ExpandConstant('"{app}/XX3模块/XX3.exe"');
sPathGuideExe := 'firewall set allowedprogram ' + sPathGuideExe + ' CMSXX3模块 ENABLE';
sPathGuide := ExpandConstant('"{app}/XX3模块/"');
ShellExec('open','netsh',sPathGuideExe,sPathGuide,SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
//用于判断是否已经安装过该模块
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS','GuideFlag','003guide');
end;
{XX4模块安装时,在防火墙中设置为例外程序}
procedure OpenFireWallAfterInstallSeafood(FileName:string);
var
sPathSeafood: string;
sPathSeafoodExe: string;
begin
sPathSeafoodExe := ExpandConstant('"{app}/XX4模块/XX4.exe"');
sPathSeafoodExe := 'firewall set allowedprogram ' + sPathSeafoodExe + ' CMSXX4模块 ENABLE';
sPathSeafood := ExpandConstant('"{app}/XX4模块/"');
ShellExec('open','netsh',sPathSeafoodExe,sPathSeafood,SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
//用于判断是否已经安装过该模块
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS','OtherFlag','004other');
end;
{XX5模块安装时,在防火墙中设置为例外程序}
procedure OpenFireWallAfterInstallXX5(FileName:string);
var
sPathXX5: string;
sPathXX5Exe: string;
begin
sPathXX5Exe := ExpandConstant('"{app}/XX5模块/XX5.exe"');
sPathXX5Exe := 'firewall set allowedprogram ' + sPathXX5Exe + ' CMSXX5模块 ENABLE';
sPathXX5 := ExpandConstant('"{app}/XX5模块/"');
ShellExec('open','netsh',sPathXX5Exe,sPathXX5,SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
//用于判断是否已经安装过该模块
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS','AccountFlag','005account');
end;
{XX6模块安装时,在防火墙中设置为例外程序}
procedure OpenFireWallAfterInstallXX6(FileName:string);
var
sPathXX6Exe:string;
sPathXX6:string;
begin
sPathXX6 := ExpandConstant('"{app}/XX6模块/"');
sPathXX6Exe := ExpandConstant('"{app}/XX6模块/XX6.exe"');
sPathXX6Exe := 'firewall set allowedprogram ' + sPathXX6Exe + ' CMSXX6模块 ENABLE';
ShellExec('open','netsh',sPathXX6Exe,sPathXX6,SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
//用于判断是否已经安装过该模块
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS','XX6Flag','006bksms');
end;
{XX7模块安装时,在防火墙中设置为例外程序}
procedure OpenFireWallAfterInstallHouse(FileName:string);
var
sPathXX7:string;
sPathXX7Exe:string;
begin
sPathXX7Exe := ExpandConstant('"{app}/XX7模块/XX7.exe"');
sPathXX7Exe := 'firewall set allowedprogram ' + sPathXX7Exe + ' CMSXX7模块 ENABLE';
sPathXX7 := ExpandConstant('"{app}/XX7模块/"');
ShellExec('open','netsh',sPathXX7Exe,sPathXX7,SW_HIDE,ewNoWait,ErrorCode);
Sleep(800);
//用于判断是否已经安装过该模块
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS','XX7Flag','007warehouse');
end;
{安装前初始化Page输入页面}
var
Page: TInputQueryWizardPage;
ServerIP:string;
procedure InitializeWizard;
begin
ServerIP := ''
Page := CreateInputQueryPage(wpSelectComponents, '配置本地数据源','用于本机程序连接XX1', '输入要连接的数据库XX1IP地址');
Page.Add('XX1IP(如 192.168.0.1):',False);
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'Server',ServerIP);
Page.Values[0] := ServerIP;
end;
{以‘.’分4段判断IP地址格式是否正确}
function CheckIP(IpValue:string):Boolean;
var
ArrayIP:string;
i:Integer;
j:Integer;
S:string;
S1:string;
S2:string;
S3:string;
MidValue:string;
MidValue1:string;
MidValue2:string;
MidValue3:string;
Result0:Boolean;
Result1:Boolean;
Result2:Boolean;
Result3:Boolean;
begin
S := ''
S1 := ''
S2 := ''
S3 := ''
MidValue := ''
MidValue1 := ''
MidValue2 := ''
MidValue3 := ''
ArrayIP := IpValue;
//判断第1段值位于0--255
for i:= 1 to length(ArrayIP) do
if ArrayIP[i] = '.' then
begin
j := i;
for i:= j+1 to length(ArrayIP) do
begin
MidValue := MidValue + ArrayIP[i];
end;
for i:= 1 to j-1 do
S := S + ArrayIP[i];
if StrToIntDef(S,-1) >= 0 then
begin
if StrToIntDef(S,-1) <= 255 then
begin
Result0 := True;
end else begin
Result0 := False;
end;
end else begin
Result0 := False;
end;
break;
end;
//判断第2段值位于0--255
for i:= 1 to length(MidValue) do
if MidValue[i] = '.' then
begin
j:= i;
for i:= j+1 to length(MidValue) do
begin
MidValue1 := MidValue1 + MidValue[i];
end;
for i:= 1 to j-1 do
S1 := S1 + MidValue[i];
if StrToIntDef(S1,-1) >= 0 then
begin
if StrToIntDef(S1,-1) <= 255 then
begin
Result1 := True;
end else begin
Result1 := False;
end;
end else begin
Result1 := False;
end;
break;
end;
//判断第3段值位于0--255
for i:= 1 to length(MidValue1) do
if MidValue1[i] = '.' then
begin
j:= i;
for i:= j+1 to length(MidValue1) do
begin
MidValue2 := MidValue2 + MidValue1[i];
end;
for i:= 1 to j-1 do
S2 := S2 + MidValue1[i];
if StrToIntDef(S2,-1) >= 0 then
begin
if StrToIntDef(S2,-1) <= 255 then
begin
Result2 := True;
end else begin
Result2 := False;
end;
end else begin
Result2 := False;
end;
break;
end;
//判断第4段位于0--255
if StrToIntDef(MidValue2,-1) >= 0then
begin
if StrToIntDef(MidValue2,-1) <= 255 then
begin
Result3 := True;
end else begin
Result3 := False;
end;
end else begin
Result3 := False;
end;
if ( Result0 = True ) then
begin
if ( Result1 = True ) then
begin
if( Result2 = True ) then
begin
if( Result3 = True ) then
begin
Result := True;
end else begin
Result := False;
end;
end else begin
Result := False;
end;
end else begin
Result := False;
end;
end else begin
Result := False;
end;
end;
{用于判断Page页面的输入框是否为空及判断是否选择的模块为空及某模块是否已经安装}
function NextButtonClick(CurPageID: Integer): Boolean;
var
ServerFlag:string;
SysSetFlag:string;
GuideFlag:string;
OtherFlag:string;
AccountFlag:string;
XX6Flag:string;
XX7Flag:string;
strInfo:string;
selectComponents:string;
begin
if( CurPageID = Page.ID ) then
begin
if( Page.Values[0] = '' ) then
begin
MsgBox('IP地址不能为空,必须输入数据库XX1的IP地址!',mbError,MB_OK);
Result := False;
end
else if ( CheckIP(Page.Values[0]) = False ) then
begin
MsgBox('IP地址不正确,请重新输入!',mbError,MB_OK);
Result := False;
end else begin
if MsgBox('您输入的IP地址是' + Page.Values[0] + ',继续请按[是],取消请按[否]!', mbConfirmation, MB_YESNO ) = IDYES then begin
Result := True;
end else begin
Result := False;
end;
end;
end
else if ( CurPageID = wpSelectComponents ) then
begin//begin
strInfo := ''
selectComponents := WizardSelectedComponents(false);
if ( selectComponents = '' ) then begin
MsgBox('必须选择一个模块进行安装!',mbError,MB_OK);
Result := False;
end else
begin
if ( pos('cater_server',selectComponents) > 0 ) then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'ServerFlag',ServerFlag);
if ServerFlag = '001server' then
begin
strInfo := strInfo + ' ' + 'XX1' + #10 + #10;
end
else begin
strInfo := strInfo;
end
end
if ( pos('cmssyssetting',WizardSelectedComponents(false)) > 0 ) then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'SysSetFlag',SysSetFlag);
if SysSetFlag = '002sysset' then
begin
strInfo := strInfo + ' ' + 'XX2'+ #10 + #10;
end
else begin
strInfo := strInfo;
end
end
if ( pos('cateringguide',WizardSelectedComponents(false)) > 0 ) then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'GuideFlag',GuideFlag);
if GuideFlag = '003guide' then
begin
strInfo := strInfo + ' ' + 'XX3模块' + #10 + #10;
end
else begin
strInfo := strInfo;
end
end
if ( pos('cateringservice',WizardSelectedComponents(false)) > 0 ) then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'OtherFlag',OtherFlag);
if OtherFlag = '004other' then
begin
strInfo := strInfo + ' ' + 'XX4模块' + #10 + #10;
end
else begin
strInfo := strInfo;
end
end
if ( pos('acount',WizardSelectedComponents(false)) > 0 ) then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'AccountFlag',AccountFlag);
if AccountFlag = '005account' then
begin
strInfo := strInfo + ' ' + 'XX5模块' + #10 + #10;
end
else begin
strInfo := strInfo;
end
end
if ( pos('bksms',WizardSelectedComponents(false)) > 0 ) then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'XX6Flag',XX6Flag);
if XX6Flag = '006bksms' then
begin
strInfo := strInfo + ' ' + 'XX6模块' + #10 + #10;
end
else begin
strInfo := strInfo;
end
end
if ( pos('warehouse',WizardSelectedComponents(false)) > 0 ) then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'XX7Flag',XX7Flag);
if XX7Flag = '007warehouse' then
begin
strInfo := strInfo + ' ' + 'XX7模块' + #10 + #10;
end
else begin
strInfo := strInfo;
end
end
//判断
if strInfo <> '' then
begin
if Msgbox( '安装程序发现下列模块已经安装:'+ #10 + #10 + strInfo + '再次安装将覆盖已存在模块,无论如何也要继续吗?',mbConfirmation,MB_YESNO) = IDYES then
begin
Result := True;
end
else
begin
Result := False;
end
end
else begin
Result := True;
end
end;
end//end
else begin
Result := True;
end;
end;
{如果本机已经安装过该系统,则跳过选择路径页面}
function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result := False;
if PageID = wpSelectDir then
begin
if RegKeyExists(HKEY_CURRENT_USER, 'Software/ODBC/ODBC.INI/CMS') then
Result := True;
end;
end;
{获取Page页面输入框中的输入IP值}
function GetDataPage(Param: String): String;
begin
{ Return the IP }
Result := Page.Values[0];
end;
{卸载前初始化}
function InitializeUninstall(): Boolean;
begin
Result := True;
end;
{自定义函数,在确定删除程序后首先把防火墙中的例外程序删除}
function UninstallTrue(Param:string):string;
var
sPathDeleteServer:string;
sPathDSysSet:string;
sPathDGuide:string;
sPathDSeafood:string;
sPathDAccount:string;
sPathDBks:string;
sPathDWarehouse:string;
begin
{停止并删除XX1服务,把该XX1程序从防火墙的例外中删除}
sPathDeleteServer := ExpandConstant('"{sys}/CMSServer/caterServer.exe"');
sPathDeleteServer := 'firewall delete allowedprogram ' + sPathDeleteServer;
sPathDSysSet := ExpandConstant('"{app}/XX2模块/XX2.exe"');
sPathDSysSet := 'firewall delete allowedprogram ' + sPathDSysSet;
sPathDGuide := ExpandConstant('"{app}/XX3模块/XX3.exe"');
sPathDGuide := 'firewall delete allowedprogram ' + sPathDGuide;
sPathDSeafood := ExpandConstant('"{app}/XX4模块/XX4.exe"');
sPathDSeafood := 'firewall delete allowedprogram ' + sPathDSeafood;
sPathDAccount := ExpandConstant('"{app}/XX5模块/XX5.exe"');
sPathDAccount := 'firewall delete allowedprogram ' + sPathDAccount;
sPathDBks := ExpandConstant('"{app}/XX6模块/XX6.exe"');
sPathDBks := 'firewall delete allowedprogram ' + sPathDBks;
sPathDWarehouse := ExpandConstant('"{app}/XX7模块/XX7.exe"');
sPathDWarehouse := 'firewall delete allowedprogram ' + sPathDWarehouse;
ShellExec('open','netsh','firewall delete portopening TCP 1433','',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
ShellExec('open','netsh',sPathDeleteServer,'',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
ShellExec('open','sc','stop CMSserver','',SW_HIDE,ewNoWait,ErrorCode);
Sleep(1000);
ShellExec('open','sc','delete CMSserver','',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
{把XX2程序从防火墙的例外中删除}
ShellExec('open','netsh',sPathDSysSet,'',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
{把XX3程序从防火墙的例外中删除}
ShellExec('open','netsh',sPathDGuide,'',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
{把XX4模块的程序从防火墙的例外中删除}
ShellExec('open','netsh',sPathDSeafood,'',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
{把XX5程序从防火墙的例外中删除}
ShellExec('open','netsh',sPathDAccount,'',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
{把XX6程序从防火墙的例外中删除}
ShellExec('open','netsh',sPathDBks,'',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
{把XX7程序从防火墙的例外中删除}
ShellExec('open','netsh',sPathDWarehouse,'',SW_HIDE,ewNoWait,ErrorCode);
Sleep(500);
end;
{当确定卸载时,开始执行}
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usUninstall:
begin
UninstallTrue('');
end;
end;
end;
{当前安装未完成,点取消按钮,在提示框中选择确定时把已经安装的部分全部删除}
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if( CurPageID = wpInstalling ) then
begin
Cancel := False;
Confirm := False;
if( ExitSetupMsgBox = True ) then
begin
if RegKeyExists(HKEY_CURRENT_USER, 'Software/ODBC/ODBC.INI/CMS') then
begin
Cancel := True;
Confirm := False;
end
else begin
UninstallTrue('');
RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE,'Software/ODBC/ODBC.INI/CMS');
Cancel := True;
Confirm := False;
end
end;
end;
end;
{安装路径:如果未安装,默认路径,如果已经安装过,使用原路径覆盖}
function GetInitPath(Param:string): String;
var InitPath:string;
begin
if RegKeyExists(HKEY_CURRENT_USER, 'Software/ODBC/ODBC.INI/CMS') then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software/ODBC/ODBC.INI/CMS', 'InitPath',InitPath);
Result := InitPath;
end
else
begin
Result := ExpandConstant('{pf}/餐饮管理系统');
end;
end;
{安装前判断所安装的机器是否有Framework,如果有,则不安装,没有,则先安装Framework}
Procedure InstallFrame(FileName:string);
var ResultCode:Integer;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE,'Software/Microsoft/.NETFramework') then
begin
end
else begin
if Msgbox('安装程序检测到本机尚未安装FrameWork,为确保程序正确运行,请点击确定按钮完成FrameWork的安装!',mbConfirmation,MB_OKCANCEL) = IDOK then
begin
if not ShellExec('open',ExpandConstant('"{tmp}/FrameWork/dotnetfx.exe"'),'',ExpandConstant('"{tmp}/FrameWork/"'),SW_SHOW,ewWaitUntilTerminated, ResultCode) then
begin
SysErrorMessage(ResultCode);
end
end
else begin
Msgbox('FrameWork未安装,安装程序可能不能正确运行!',mbConfirmation,MB_OK);
end
end;
end;