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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 22-10-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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 08:52, 02-02-2015

 

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


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

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


Цитата:
Код:
#include "SHFileOperation.iss"
.....
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
CopyDir(ExpandConstant('{app}\Folder'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;
Сам SHFileOperation можете спокойно найти в сети.
Спасибо огромное, но есть одна проблема, в папки у которых в имени есть _ не копируется.

Отправлено: 12:41, 23-05-2015 | #631



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

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


Аватара для kotyarko@fb

Старожил


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

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


Изображения
Тип файла: jpg 23.05.jpg
(18.6 Kb, 13 просмотров)

Цитата Николай_Николаич@vk:
но есть одна проблема, в папки у которых в имени есть _ не копируется. »
Код, по идеи, не должен игнорировать такие папки. У меня не игнорирует (пруф в прикреплённом скрине).
Не знаю, почему у тебя так.

-------
http://forum.worldoftanks.ru/topic/1429925-/
Исходник моего установщика: https://bitbucket.org/Kotyarko_O/kmp


Последний раз редактировалось kotyarko@fb, 23-05-2015 в 13:44.

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

Отправлено: 13:38, 23-05-2015 | #632


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


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

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


Цитата kotyarko@fb:
Код, по идеи, не должен игнорировать такие папки. У меня не игнорирует (пруф в прикреплённом скрине).
Не знаю, почему у тебя так. »
Если внести папку в секцию [dirs] то все хорошо.
Еще случай, один раз инсталл пропустил папку с названием "1", при повторной попытке всетаки скопировал.

Отправлено: 20:43, 23-05-2015 | #633


Аватара для kotyarko@fb

Старожил


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

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


Цитата Николай_Николаич@vk:
Еще случай, один раз инсталл пропустил папку с названием "1", при повторной попытке всетаки скопировал. »
Папки создаются при этой же инсталляции?

-------
http://forum.worldoftanks.ru/topic/1429925-/
Исходник моего установщика: https://bitbucket.org/Kotyarko_O/kmp


Отправлено: 20:48, 23-05-2015 | #634


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


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

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


Цитата kotyarko@fb:
Папки создаются при этой же инсталляции? »
Нет, они уже были.

Отправлено: 21:04, 23-05-2015 | #635


Аватара для kotyarko@fb

Старожил


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

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


Цитата Николай_Николаич@vk:
Нет, они уже были. »
Тогда хз.

-------
http://forum.worldoftanks.ru/topic/1429925-/
Исходник моего установщика: https://bitbucket.org/Kotyarko_O/kmp


Отправлено: 21:23, 23-05-2015 | #636


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


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

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


Николай_Николаич@vk,
код
Код: Выделить весь код
[setup]
appname=test
appvername=test 1.0
defaultdirname={sd}\test

[code]
type
   TSHFileOpStruct =  record
     Wnd: HWND;
     wFunc: UINT;
     pFrom: PAnsiChar;
     pTo: PAnsiChar;
     fFlags: Word;
     fAnyOperationsAborted: BOOL;
     hNameMappings: HWND;
     lpszProgressTitle: PAnsiChar;
   end;

const
   FO_MOVE                    = $0001;
   FO_COPY                    = $0002;
   FOF_SILENT                 = $0004;
   FOF_NOCONFIRMATION         = $0010;
   FOF_FILESONLY              = $0080;
   FOF_NOCONFIRMMKDIR         = $0200;

function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer; external 'SHFileOperation@shell32.dll stdcall';

function BackupDir(const fromDir, toDir: AnsiString; IsMove: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: AnsiString;
  SR: TFindRec;
  res: Boolean;
begin
    ForceDirectories(toDir);
  if IsMove then
    fos.wFunc  := FO_MOVE else
    fos.wFunc  := FO_COPY;
    fos.fFlags := FOF_FILESONLY or FOF_SILENT or
               FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    _fromDir:= AddBackslash(fromDir);
    _toDir  := AddBackslash(toDir);
  if (Length(fromDir) = Length(_fromDir)) then
    begin
        res:= FindFirst(_fromDir + '*', SR);
      try
        while res do
        begin
          if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir + #0#0;
                fos.pFrom  := PAnsiChar(_fromDir);
                fos.pTo    := PAnsiChar(_toDir);
              end else
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir   + SR.Name + #0#0;
                fos.pFrom  := PAnsiChar(_fromDir);
                fos.pTo    := PAnsiChar(_toDir);
              end;
                Result := (0 = ShFileOperation(fos));
                _fromDir:= ExtractFilePath(_fromDir);
                _toDir:= ExtractFilePath(_toDir);
          end;
          res := FindNext(SR);
        end;
      finally
        FindClose(SR);
      end;
    end else
    begin
      _fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
      _toDir  := RemoveBackslashUnlessRoot(_toDir)   + #0#0;
      fos.pFrom  := PAnsiChar(_fromDir);
      fos.pTo    := PAnsiChar(_toDir);
      Result := (0 = ShFileOperation(fos));
    end;
end;

procedure SendFileToSubFolders(ScanDir, InFile: string);
var
 TFR: TFindRec;
begin
 if FindFirst(AddBackslash(RemoveBackslash(ScanDir)) + '*', TFR) then
  try
   repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
     if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then begin
        FileCopy(InFile, AddBackslash(RemoveBackslash(ScanDir)) + TFR.Name + '\' + ExtractFileName(InFile), False);
       end;
   until not FindNext(TFR);
  finally
   FindClose(TFR);
  end;
end;

procedure SendDirToSubFolders(ScanDir, InDir: string);
var
 TFR: TFindRec;
begin
 if FindFirst(AddBackslash(RemoveBackslash(ScanDir)) + '*', TFR) then
  try
   repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
     if (TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
         BackupDir(AddBackslash(RemoveBackslash(InDir)), AddBackslash(RemoveBackslash(ScanDir)) + TFR.Name + '\' + ExtractFileName(InDir), false);
   until not FindNext(TFR);
  finally
   FindClose(TFR);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  //Для файла
//  if CurStep = ssPostInstall then SendFileToSubFolders(ExpandConstant('{app}\1'), ExpandConstant('{sd}\spyhunter.log'));
  //Для папки
  if CurStep = ssPostInstall then SendDirToSubFolders(ExpandConstant('{app}\1'), ExpandConstant('{sd}\sh4ldr'));
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:03, 23-05-2015 | #637


Пользователь


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

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


сори что не в тему!!!
kotyarko@fb ящик ЛС полный! новые сообщения не уходят...

Отправлено: 22:35, 23-05-2015 | #638


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


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

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


Кстати, не подскажете, давно искал пример двойного прогресс бара (Один по файловый, второй - общий прогресс), но никак не мог найти.
Есть ли таковой?

Отправлено: 23:20, 23-05-2015 | #639


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


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

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


Цитата Николай_Николаич@vk:
Кстати, не подскажете, давно искал пример двойного прогресс бара (Один по файловый, второй - общий прогресс), но никак не мог найти.
Есть ли таковой? »
В ISDone 06final есть пример SecondProgressBar
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:06, 24-05-2015 | #640



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты 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




 
Переход