Ветеран
Сообщения: 517
Благодарности: 314
Профиль
|
Отправить PM
| Цитировать
novahudonoser , немножко допилил и причесал скрипт. Проверил: страницы пропускаются и показываются, как и требуется.
Скрипт
Код:
[Setup]
AppName =TimeCalculator
AppVerName =TimeCalculator
AppPublisher =zzz
OutputDir =.
OutputBaseFilename =TimeCalculator_1.8
DefaultDirName ={code:GetInstallDir}
;AllowNoIcons=yes
DefaultGroupName =TimeCalculator
DisableStartupPrompt =yes
Compression =lzma
SolidCompression =yes
WizardImageFile =setup_2.bmp
WizardSmallImageFile =setup_1.bmp
[Languages]
Name : "russian"; MessagesFile : "compiler:Languages\Russian.isl"
[Files]
Source : "TimeCalculator.exe"; DestDir : "{app} "; CopyMode : alwaysoverwrite ; Flags : recursesubdirs
Source : "DataBaseEditor.exe"; DestDir : "{app} "; CopyMode : alwaysoverwrite ; Flags : recursesubdirs
Source : "help\TimeCalculator.chm"; DestDir : "{app} "; CopyMode : alwaysoverwrite ; Flags : recursesubdirs
[Tasks]
Name : desktopicon; Description : "{cm:CreateDesktopIcon} "; GroupDescription : "{cm:AdditionalIcons} "
[Registry]
Root : HKLM ; Subkey : SOFTWARE\TimeCalculator; Flags : dontcreatekey uninsdeletekey ;
[Icons]
Name : "{group} \TimeCalculator"; Filename : "{app} \TimeCalculator.exe"; WorkingDir : "{app} "; IconFilename :"{app} \TimeCalculator.exe"
Name : "{group} \Справка"; Filename : "{app} \TimeCalculator.chm"
Name : "{group} \Удалить программу"; Filename : "{uninstallexe} "
Name : "{userdesktop} \TimeCalculator"; Filename : "{app} \TimeCalculator.exe"; WorkingDir : "{app} "; IconFilename :"{app} \TimeCalculator.exe"; Tasks : desktopicon
[Run]
Filename : "{app} \TimeCalculator.exe"; Description : "Запустить программу"; Flags : nowait postinstall skipifsilent
Filename : "{app} \TimeCalculator.chm"; Description : "Открыть справку"; Flags : shellexec nowait postinstall skipifsilent
[InstallDelete]
Type : files ; Name : "{app} \TimeCalculator.exe"
Type : files ; Name : "{app} \TimeCalculator.chm"
Type : files ; Name : "{app} \DataBaseEditor.exe"
[UninstallDelete]
Type : files ; Name : "{app} \TimeCalculator.exe"
Type : files ; Name : "{app} \TimeCalculator.tcs"
Type : files ; Name : "{app} \TimeCalculator.chm"
Type : files ; Name : "{app} \DataBaseEditor.exe"
[ Code]
var
ValueExists: Boolean;
// функция обнаружения запущенного процесса
function IsProcessRunning(FileName: String ): Boolean;
var
objSWbemLocator, objSWbemServices: Variant;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
except
ShowExceptionMessage;
Exit;
end ;
objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
Result := (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end ;
// проверка ключа в реестре, если он есть - берём из него путь для установки
function GetInstallDir(const Default: String ): String ;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\TimeCalculator', 'path', Result);
if Result <> '' then RemoveBackslash(Result) else Result := ExpandConstant('{pf}\TimeCalculator');
end ;
// на этапе установки проверяем запущен ли определённый процесс, если запущен - отменяем установку и выводим месейдж
function InitializeSetup (): Boolean;
begin
Result := not IsProcessRunning('TimeCalculator.exe');
if not Result then MsgBoxEx(Application.Handle, 'Программа TimeCalculator запущена!'+ Chr(10)+'Закройте приложение выбрав пункт меню "Закрыть программу"'+ Chr(10)+'И повторите установку обновления.', 'Установка обновления отменена', $10, 0, 0);
end ;
procedure RedesignWizardForm;
begin
with TLabel.Create(nil ) do
begin
Parent := WizardForm.WelcomePage;
SetBounds(ScaleX(426), ScaleY(288), ScaleX(51), ScaleY(13));
Caption := '© zzz';
end ;
WizardForm.WelcomeLabel2.Height := ScaleY(207);
WizardForm.RunList.Height := ScaleY(107);
end ;
procedure InitializeWizard ();
begin
RedesignWizardForm;
end ;
// если путь из ключа выбран - пропускаем страницу с выбором пути
function ShouldSkipPage (PageID: Integer): Boolean;
begin
ValueExists := RegValueExists(HKLM, 'SOFTWARE\TimeCalculator', 'path');
case PageID of
wpSelectDir: Result := ValueExists;
wpReady: Result := not ValueExists;
end ;
end ;
procedure CurPageChanged (CurPageID: Integer);
begin
case CurPageID of
wpSelectTasks: if ValueExists then WizardForm.NextButton.Caption := SetupMessage(msgButtonNext) else WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
end ;
end ;
// на этапе деинсталяции проверяем запущен ли определённый процесс, если запущен - отменяем деинсталяцию и выводим месейдж
function InitializeUninstall (): Boolean;
begin
Result := not IsProcessRunning('TimeCalculator.exe');
if not Result then MsgBoxEx(Application.Handle, 'Программа TimeCalculator запущена!'+ Chr(10)+'Закройте приложение выбрав пункт меню "Закрыть программу"'+ Chr(10)+'И запустите процесс деинсталяции заново.', 'Деинсталяция отменена', $10, 0, 0);
end ;
Это сообщение посчитали полезным следующие участники:
Отправлено : 17:53, 18-01-2014
| #1888