Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


КОМРАДЫ! Подскажите пожалуйста реализацию скрипта: "с возможностью обновления программы"
пример:
установщик перед началом распаковки новых файлов - проверяет не только их наличие в системе но и их состояние
в часности, та программа которую пользователь пытается обновить - уже запущена, следовательно скрипт должен отправить приложению мессагу что бы та благополучно закрылась
и только потом уже копировал файлы с заменой.

собственно интересует реализация:
1. проверяем, запущена программа или нет
2. если запущена то закрываем её

полагаю что где то рядом с [Setup]: CloseApplications
но как юзать не догнал (

Последний раз редактировалось novahudonoser, 15-01-2014 в 23:50.


Отправлено: 23:23, 15-01-2014 | #1841



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


novahudonoser, шапка - Ссылки на примеры скриптов: - Запущен ли процесс (WMI)/Запущен ли процесс - Закрытие процесса - изучай, применяй.

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:22, 16-01-2014 | #1842


Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


пример закрытия приложения не компилится (
http://joxi.ru/y_XWUhjKTJBsG5SWhto

Отправлено: 00:56, 16-01-2014 | #1843


Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


кстати Сборник скриптов в формате chm не пашет http://joxi.ru/fvvWUhjKTJBtGxme7BI

Отправлено: 01:20, 16-01-2014 | #1844


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата novahudonoser:
пример закрытия приложения не компилится ( »
У вас не установлен препроцессор

Отправлено: 01:28, 16-01-2014 | #1845


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите сделать второй чекбокс для бекапа.
Код: Выделить весь код
[_Code] 
var 
MyTask: TCheckBox; 
 
function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFileA@kernel32.dll stdcall'; 
 
procedure CurStepChanged(CurStep: TSetupStep); 
var 
FindFiles: TFindRec; 
i: integer; 
MyFiles: array of string; 
MyDir, BackDir: string; 
begin 
  if CurStep=ssInstall then begin 
    if MyTask.Checked then begin 
      MyFiles:=['*']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками 
      MyDir:=ExpandConstant('{app}'+'\'); //папка откуда бакупить 
      BackDir:=ExpandConstant('{app}'+'\Backup\'); // папка куда бакупить 
      for i:=0 to GetArrayLength(MyFiles)-1 do 
      begin 
        if FindFirst(MyDir+MyFiles[i], FindFiles) then begin 
          repeat 
            if not DirExists(BackDir) then begin 
              CreateDir(BackDir); 
            end; 
            MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name); 
          until not FindNext(FindFiles); 
          FindClose(FindFiles); 
        end; 
      end; 
    end; 
  end; 
end; 
 
procedure InitializeWizard(); 
begin 
  MyTask:=TCheckBox.Create(WizardForm); 
  with MyTask do 
  begin 
    Parent:=WizardForm.SelectDirPage; 
    Caption:='Create Backup'; 
    Left:=ScaleX(0); 
    Top:=ScaleY(100); 
    Width:=ScaleX(400); 
    Height:=ScaleY(15); 
    TabOrder:=0; 
    Checked:=True; 
  end; 
end;

Отправлено: 01:39, 16-01-2014 | #1846


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата PerfectLove:
Помогите сделать второй чекбокс для бекапа. »
Не уловил суть. Просто второй чекбокс? Пожалуйста, здесь массив чекбоксов с двумя элементами. Действие назначено только для чекбокса с индексом 0(arrayChkBox[0]):
Пример
Код: Выделить весь код
[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFile{#A}@kernel32.dll stdcall';


var
    arrayChkBox: array of TCheckBox;


procedure CreateChkBox();
var
    i, Len: Integer;
begin
    SetArrayLength(arrayChkBox, 2);
    Len := GetArrayLength(arrayChkBox) - 1;
    
    for i := 0 to Len do
        begin
            arrayChkBox[i] := TCheckBox.Create(nil);
            with arrayChkBox[i] do
            begin
                Parent := WizardForm.SelectDirPage;
                SetBounds(ScaleX(0), ScaleY(115 + i*20), ScaleX(400), ScaleY(15));
                Checked := True;

                case i of
                    0: Caption := 'Create Backup';
                    Len: Caption := 'Create Backup 2';
                end;
            end;
        end;
end;


procedure InitializeWizard();
begin
    CreateChkBox();
end;


procedure CurStepChanged(CurStep: TSetupStep);
var
    FindFiles: TFindRec;
    i: Integer;
    MyFiles: array of string;
    MyDir, BackDir: string;
begin
    case CurStep of
        ssInstall:
        begin
            if arrayChkBox[0].Checked then
            begin
                MyFiles := ['*'];
                MyDir := ExpandConstant('{app}' + '\');
                BackDir := ExpandConstant('{app}' + '\Backup\');
                for i := 0 to GetArrayLength(MyFiles) - 1 do
                begin
                    if FindFirst(MyDir+MyFiles[i], FindFiles) then
                    begin
                        repeat
                            if not DirExists(BackDir) then
                            begin
                                CreateDir(BackDir);
                            end;
                            MoveFile(MyDir + FindFiles.Name, BackDir + FindFiles.Name);
                        until not FindNext(FindFiles);
                    FindClose(FindFiles);
                    end;
                end;
            end;
        end;
    end;
end;



И пример попроще, без массива. Действие назначено только для чекбокса MyTask:
Пример
Код: Выделить весь код
[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFile{#A}@kernel32.dll stdcall';


var
    MyTask, MyTask2: TCheckBox;


procedure CreateChkBox();
begin
    MyTask := TCheckBox.Create(nil);
    with MyTask do
    begin
        Parent := WizardForm.SelectDirPage;
        SetBounds(ScaleX(0), ScaleY(115), ScaleX(400), ScaleY(15));
        Caption := 'Create Backup';
        Checked := True;
    end;
    
    MyTask2 := TCheckBox.Create(nil);
    with MyTask2 do
    begin
        Parent := WizardForm.SelectDirPage;
        SetBounds(ScaleX(0), ScaleY(MyTask.Top + 20), ScaleX(400), ScaleY(15));
        Caption := 'Create Backup2';
        Checked := True;
    end;
end;


procedure InitializeWizard();
begin
    CreateChkBox();
end;


procedure CurStepChanged(CurStep: TSetupStep);
var
    FindFiles: TFindRec;
    i: Integer;
    MyFiles: array of string;
    MyDir, BackDir: string;
begin
    case CurStep of
        ssInstall:
        begin
            if MyTask.Checked then
            begin
                MyFiles := ['*'];
                MyDir := ExpandConstant('{app}' + '\');
                BackDir := ExpandConstant('{app}' + '\Backup\');
                for i := 0 to GetArrayLength(MyFiles) - 1 do
                begin
                    if FindFirst(MyDir+MyFiles[i], FindFiles) then
                    begin
                        repeat
                            if not DirExists(BackDir) then
                            begin
                                CreateDir(BackDir);
                            end;
                            MoveFile(MyDir + FindFiles.Name, BackDir + FindFiles.Name);
                        until not FindNext(FindFiles);
                    FindClose(FindFiles);
                    end;
                end;
            end;
        end;
    end;
end;


P. S.
На форуме полно примеров, как создать кастомный чекбокс.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:03, 16-01-2014 | #1847


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата saurn:
Не уловил суть. »
Виноват, мой косяк что не уточнил. На данный момент первый чекбокс делает бекап всей папки. Хочу добавить второй чекбокс чтобы делать бекап только нескольких файлов а не всей папки.

Отправлено: 04:59, 16-01-2014 | #1848


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата PerfectLove:
На данный момент первый чекбокс делает бекап всей папки. Хочу добавить второй чекбокс чтобы делать бекап только нескольких файлов а не всей папки. »
Пример
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program\Fonts
OutputDir=.


[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}; Flags: external overwritereadonly ignoreversion;


[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFile{#A}@kernel32.dll stdcall';


var
    arrayChk: array of TCheckBox;


function ChkChecked(const Index: Integer): Boolean;
var
    Len: Integer;
begin
    Len := GetArrayLength(arrayChk) - 1;

    if Index > Len then Exit;
    Result := arrayChk[Index].Checked;
end;


procedure CreateBackup();
var
    FindFiles: TFindRec;
    i, Len: Integer;
    MyFiles: array of string;
    MyDir, BackDir: string;
begin
    Len := GetArrayLength(arrayChk) - 1;
    if (ChkChecked(0) and ChkChecked(Len)) then Exit; //Если выбраны оба чекбокса резервная копия создана не будет
    if ChkChecked(0) then MyFiles := ['*']; //Резервное копирование папки
    if ChkChecked(Len) then MyFiles := ['ariali.ttf', 'tahoma.ttf', 'verdana.ttf']; //Резервное копирование определенных файлов
    MyDir := ExpandConstant('{app}' + '\');
    BackDir := ExpandConstant('{app}' + '\Backup\');

    for i := 0 to GetArrayLength(MyFiles) - 1 do
    begin
        if FindFirst(MyDir + MyFiles[i], FindFiles) then
        begin
            repeat
                if not DirExists(BackDir) then
                begin
                    CreateDir(BackDir);
                end;
                MoveFile(MyDir + FindFiles.Name, BackDir + FindFiles.Name);
            until not FindNext(FindFiles);

            FindClose(FindFiles);
        end;
    end;
end;


procedure CreateChk();
var
    i, Len: Integer;
begin
    SetArrayLength(arrayChk, 2);
    Len := GetArrayLength(arrayChk) - 1;

    for i := 0 to Len do
    begin
        arrayChk[i] := TCheckBox.Create(nil);
        with arrayChk[i] do
        begin
            Parent := WizardForm.SelectDirPage;
            SetBounds(ScaleX(0), ScaleY(115 + i*20), ScaleX(400), ScaleY(15));

            case i of
                0: Caption := 'Создать резервную копию папки';
                Len: Caption := 'Создать резервную копию основных файлов';
            end;
        end;
    end;
end;


procedure InitializeWizard();
begin
    CreateChk();
end;


procedure CurStepChanged(CurStep: TSetupStep);
var
    Len: Integer;
begin
    Len := GetArrayLength(arrayChk) - 1;

    case CurStep of
        ssInstall: if (ChkChecked(0) or ChkChecked(Len)) then CreateBackup();
    end;
end;

Последний раз редактировалось saurn, 16-01-2014 в 09:13.

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:09, 16-01-2014 | #1849


Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


Цитата novahudonoser:
кстати Сборник скриптов в формате chm не пашет »
писали уже наверно 100500 раз - правой кнопкой по файлу - свойства - разблокировать.

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".


Отправлено: 07:09, 16-01-2014 | #1850



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход