Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 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