Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup - создание инсталляционных пакетов (Часть 15)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151

Открыть новую тему     Написать ответ в эту тему

Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inno Setup
 
 

Предыдущие части
Это мощное бесплатное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки.
По сравнению с NSIS (основной конкурент на бесплатной основе) проще в настройке, имеет более понятную структуру скрипта, но генерит на 200-300 кб больший инсталятор. На данный момент он конкурирует и даже превосходит многие коммерческие установщики по функциональности и стабильности.
All version | Исходники проекта
 
Последние версии:
Inno Setup QuickStart Pack (Unicode) 6.1.2 [15.11.2020]
Скачать (4.23 Mb)
 
Inno Setup 6.2.2 [15.02.2023]
Скачать (4.50 Mb)
 
Что нового? | Что нового v.6x?  
 
Русский язык для Inno Setup v6.x
Скачать
 
Русский язык для Inno Setup v5.x
Скачать
 
Русская справка к версии - 6.0.0 beta | 5.6.1 - Зеркало
 
Последняя версия с поддержкой Windows 95 - 5.1.7
 
Последняя версия с поддержкой Windows 98/ME/NT4 - 5.4.3 ANSI
 
Последняя версия с поддержкой Windows 2000/XP/2003 - 5.6.1 (ANSI, Unicode)
 

Расширенная версия от китайских собратьев. Офсайт
Inno Setup Compiler 5.5.0-5.2 build 121216
Скачать (2.98 Mb) |Скачать (2.98 Mb) - зеркало GoogleDrive | Что нового
 
Inno ISCmplr Setup 5.5.1 build 120726
Скачать (1.73 Mb) | Что нового
 
Добавляет списку компонентов возможность сворачивать дочерние элементы. Содержит более удобный редактор, кроме того, компилятор имеет множество других возможностей и новых функций. На сайте автора также есть дополнительные библиотеки.
 
Русский язык для Inno Setup Enhanced (Restools) версии 5.4.x (ansi и unicode) от vadimsva
Скачать
 


Документация, FAQ, и различные примеры для Inno Setup - Здесь можно найти различную документацию, примеры, архивы веток InnoSetup для оффлайн просмотра, и т.д.
 
Дополнительные библиотеки для Inno Setup - InnoTools Downloader, коллекция DLL файлов, распаковка архивов 7-zip и FreeArc и т.д.
 
Дополнительные утилиты для Inno Setup - сюда входят различные распаковщики, надстройки над Inno Setup, различные генераторы скриптов, утилита объединения скриптов и т.д.
 
Скрипты инсталляторов для игр - В этом разделе можно найти различные обложки и скрипты инсталляторов для игр.  
 
Скрипт для добавления ярлыков в Game Explorer (работает только в Windоws 7)

Родственные темы:

Inno Setup плюс внешние упаковщики - обсуждение FreeArc+Inno, Precomp+Inno, 7zip+Inno и Inno+остальные внешние упаковщики.
 
Пережатиe/Pекомпрессия/Oптимизация файлов для лучшего сжатия - обсуждение того, какими утилитами/способами лучше сжимать, чтобы получить как можно меньший размер инсталятора.

Примечание для всех участников

Правила топика посвященному Inno Setup  
 
Перед тем, как задать вопрос: Первый вариант: загрузите "версию для печати" (ссылка справа вверху, над номерами страниц) и попробуйте поискать средствами браузера (ctrl+F). Второй вариант: для экономии трафика и для более удобного поиска, скачайте оффлайн версию форума для просмотра в разделе Документация.
Большинство типовых задач уже решались, причем неоднократно!  
Пожалуйста, не захламляйте тему и используйте поиск, этим вы избавите тему от флуда!

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:29 13-10-2013 | Исправлено: Komandor, 10:55 21-01-2024
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
brduakhTMP
 
На данный момент сиё сильно экспериментальные сборки Git ветки is-6 выдранные на неизвестный момент разработки и с неизвестным числом ошибок. Может иной раз стоит на сервере посмотреть с чем встретился? Ведь судя по списку запланированных в v6 изменений там опять будет меняться входной язык и среда разработки, да и формат контейнера тихо сменится:

Цитата:
innounp
innounp, the Inno Setup Unpacker. Version 0.47
innounp.exe -x -m -d1 innosetup-6.0.0-unicode-dev-3.exe
Signature detected: Inno Setup Setup Data (5.6.2) (u)
This is not directly supported, but i'll try to unpack it as version 5507
; Version detected: 5602 (Unicode)
Critical error: The setup files are corrupted. Please obtain a new copy of the program.

ну, это на данной стадии тестирования мелочи.
 
Добавлено:

Цитата:
добавьте в шапку

А ISS вообще тащится автоматом. Достаточно QuickStart Pack установить.


----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 33227 | Зарегистр. 31-07-2002 | Отправлено: 03:10 08-01-2019
brduakhTMP



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Victor_VG
к примеру, если установить оболочку (студию), то изначально пишет что не может найти путь, а меняешь на 6й и все ок, если просто собрать и установить, от стабильной ничем не отличается

Всего записей: 6856 | Зарегистр. 20-04-2016 | Отправлено: 12:21 08-01-2019
Victor_VG



Tracker Mod
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
brduakhTMP

Цитата:
сли просто собрать и установить, от стабильной ничем не отличается  

Разница в поведении не равносильна разнице в начинке.
 
А с путями просто - студия изначально писалась под 5-ю ветку и знает как и где её искать, под 6-ю её еще не дорабатывали - это будет иметь смысл на более позднем этапе разработки, а сейчас рано.


----------
Жив курилка! (Р. Ролан, "Кола Брюньон")
Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti

Всего записей: 33227 | Зарегистр. 31-07-2002 | Отправлено: 17:35 08-01-2019
mig73



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inno Setup Unpacker 0.48
 
Русская справка Inno Setup 6.0.0 Beta
Windows XP более не поддерживается.

Цитата:
OS requirements change: Windows 2000, XP, and Server 2003 are no longer supported. Windows Vista is the minimum supported operating system.

Всего записей: 8283 | Зарегистр. 24-02-2010 | Отправлено: 17:25 02-02-2019
brduakhTMP



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mig73
так правильно, смысл пилить обновления, на уже вымерший вид системы...
да и где ссылки на бету найти?

Всего записей: 6856 | Зарегистр. 20-04-2016 | Отправлено: 00:33 03-02-2019 | Исправлено: brduakhTMP, 00:44 03-02-2019
mig73



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
brduakhTMP
А мне вот пока не интересно переходить на v6 из-за OS requirements change, потому как мои итак убогие инсталяшки ещё и перестанут работать на старых ОС, коих в обиходе тьма.
Официально готового установщика нет, всё в разработке и пока не рекомендуется, но можно самому скомпилировать, вот и исходники текущей беты.

Всего записей: 8283 | Зарегистр. 24-02-2010 | Отправлено: 01:19 03-02-2019
Magellano

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста
 
Собираю простейший инсталл, задача которого создать бэкап заменяемых файлов при установке и при удалении вернуть их обратно на место.
Используется SHFileOperation.iss (содержимое здесь)
 
При бэкапе создается структура - папка Data и в ней заменяемые файлы.
Проблема при восстановлении - восстанавливаемая папка Data с содержимым перемещается не в корень, откуда бэкапилась, а в папку Data (исходную), т.е получается Data\Data\файлы, а должно быть Data\файлы
 
Что подправить?
 

Код:
#include "путь\SHFileOperation.iss"
 
[Files]
Source: "путь\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs; Tasks: "check3"
 
[Code]
function MoveFile(const srcFile, destFile: PChar):Integer;
external 'MoveFileA@kernel32.dll stdcall';
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'),ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Backup\'));
end;
end;
 
procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
basePath:= ExpandConstant('{app}');
srcFile:= ExpandConstant(CurrentFileName);
shortPath:= srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile:= ExpandConstant('{app}\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
 

Всего записей: 109 | Зарегистр. 08-02-2016 | Отправлено: 16:13 23-02-2019 | Исправлено: Magellano, 16:26 23-02-2019
Andrey989

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи как сделать окно больше, чтобы при выборе компонентов больше вмещалось. И каким образом можно добавить описание к каждому компоненту, чтобы при наведении вылетало описание.

Всего записей: 1 | Зарегистр. 04-03-2019 | Отправлено: 23:01 04-03-2019
MihailM



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrey989, попробуй эту
Цитата:
Расширенная версия от китайских собратьев.  

там как раз и виз. редактор есть ..

Всего записей: 2498 | Зарегистр. 19-10-2003 | Отправлено: 11:58 06-03-2019
AlexALSP



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SHFileOperation.iss
 
 
Как то он на unicod глючит.
 
переименование не срабатывает.
 
на ansi все нормально, но в ansi rtf отображается в окне информации криво ссылки рубит.
 
У кого то есть какие нибудь решения решения?
 
 
Добавлено:
Magellano
 
Аналогичная проблема.

Всего записей: 1227 | Зарегистр. 22-04-2007 | Отправлено: 11:59 14-03-2019
AlexALSP



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Magellano
 
 
Я тут у себя химичил и все же получилось обойти вложенность папок при восстановлении.
 
Если у тебя опция резервного копирования обязательна, то можно не делать чек бокс, а автоматом бекапить и восстанавливать.  
 
 

Код:
 
 
#include "SHFileOperationUnicod.iss"
 
 
[Code_]
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
 
MoveDir(ExpandConstant('{app}\addon\loadscr'),ExpandConstant('{app}\Backup\addon'));
MoveDir(ExpandConstant('{app}\addon\scripts'),ExpandConstant('{app}\Backup\addon'));
MoveDir(ExpandConstant('{app}\soundtrack'),ExpandConstant('{app}\Backup'));
 
 
end;
end;
 
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
 
MoveDir(ExpandConstant('{app}\Backup\addon\loadscr'),ExpandConstant('{app}\addon'));
MoveDir(ExpandConstant('{app}\Backup\addon\scripts'),ExpandConstant('{app}\addon'));
MoveDir(ExpandConstant('{app}\Backup\soundtrack'),ExpandConstant('{app}'));
 
 
RemoveDir(ExpandConstant('{app}\Backup\addon'));
RemoveDir(ExpandConstant('{app}\Backup'));
 
end;
end;
 
 
 

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

Код:
 
 
 
[Files]
 
Components: modpack\modes_lu\litcube; Source: "Litcube Universel\AP\AP-Addons\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs    ; BeforeInstall: CreateBackup
 
[Code_]
 
procedure CreateBackup;
var
srcFile, destFile: string;
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
 
procedure RestoreBackup(backupDir: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(backupDir);
FindResult := FindFirst(APath + '*.bak', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} RestoreBackup(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
 
 
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
RestoreBackup(ExpandConstant('{app}'))
 
end;
end;
 
 

 
Столкнулся с проблемой неработоспособности скрипта SHFileOperation.iss в unicod компиляторе
 
подсказали , что подправить, выкладываю для других, кто столкнется или у кого не ansi а unicod
 
Я себе его переименовал в SHFileOperationUnicod.iss, что бы не путаться.
 

Цитата:
 
;***************************************************************;
;****************** SHFileOperation.iss ************************;
;***************************************************************;
;* Include this file in project. Example:
;* #include "SHFileOperation.iss"
;***************************************************************;
;************************ 1 ************************************;
;* function CopyDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;*     CopyDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;*     CopyDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 2 ************************************;
;* function MoveDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;*     MoveDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;*     MoveDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 3 ************************************;
;* function DelDir(dir: string; toRecycle: Boolean): Boolean;
;*   If <toRecycle> is True, <dir> deleted in Recycle Bin.
;***************************************************************;
;************************ 4 ************************************;
;* function RenameDir(const fromDir, toDir: string): Boolean;
;***************************************************************;
;***************************************************************;
;***************************************************************;
 
[Code]
type
   TSHFileOpStruct =  record
     Wnd: HWND;
     wFunc: UINT;
     pFrom: PAnsiChar;
     pTo: PAnsiChar;
     fFlags: Word; // FILEOP_FLAGS;
     fAnyOperationsAborted: BOOL;
     hNameMappings: HWND; // Pointer;
     lpszProgressTitle: PAnsiChar; { only used if FOF_SIMPLEPROGRESS }
   end;
 
const
// use in wFunc
   { $EXTERNALSYM FO_MOVE }
   FO_MOVE           = $0001;
   { $EXTERNALSYM FO_COPY }
   FO_COPY           = $0002;
   { $EXTERNALSYM FO_DELETE }
   FO_DELETE         = $0003;
   { $EXTERNALSYM FO_RENAME }
   FO_RENAME         = $0004;
// use in fFlags
   { $EXTERNALSYM FOF_MULTIDESTFILES }
   FOF_MULTIDESTFILES         = $0001;
   { $EXTERNALSYM FOF_CONFIRMMOUSE }
   FOF_CONFIRMMOUSE           = $0002;
   { $EXTERNALSYM FOF_SILENT }
   FOF_SILENT                 = $0004;  { don't create progress/report }
   { $EXTERNALSYM FOF_RENAMEONCOLLISION }
   FOF_RENAMEONCOLLISION      = $0008;
   { $EXTERNALSYM FOF_NOCONFIRMATION }
   FOF_NOCONFIRMATION         = $0010;  { Don't prompt the user. }
   { $EXTERNALSYM FOF_WANTMAPPINGHANDLE }
   FOF_WANTMAPPINGHANDLE      = $0020;  { Fill in
SHFILEOPSTRUCT.hNameMappings
                                          Must be freed using
SHFreeNameMappings }
   { $EXTERNALSYM FOF_ALLOWUNDO }
   FOF_ALLOWUNDO              = $0040;
   { $EXTERNALSYM FOF_FILESONLY }
   FOF_FILESONLY              = $0080;  { on *.*, do only files }
   { $EXTERNALSYM FOF_SIMPLEPROGRESS }
   FOF_SIMPLEPROGRESS         = $0100;  { means don't show names of files }
   { $EXTERNALSYM FOF_NOCONFIRMMKDIR }
   FOF_NOCONFIRMMKDIR         = $0200;  { don't confirm making any
needed dirs }
   { $EXTERNALSYM FOF_NOERRORUI }
   FOF_NOERRORUI              = $0400;  { don't put up error UI }
 
 
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;
 
{****************************************************************}
function MoveDir(const fromDir, toDir: AnsiString): Boolean;
begin
  Result := BackupDir(fromDir, toDir, True);
end;
 
{****************************************************************}
function CopyDir(const fromDir, toDir: AnsiString): Boolean;
begin
  Result := BackupDir(fromDir, toDir, False);
end;
 
{****************************************************************}
function DelDir(dir: AnsiString; toRecycle: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _dir: AnsiString;
begin
    _dir:= RemoveBackslashUnlessRoot(dir) + #0#0;
    fos.wFunc  := FO_DELETE;
    fos.fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
  if toRecycle then
    fos.fFlags := fos.fFlags or FOF_ALLOWUNDO;
    fos.pFrom  := PAnsiChar(_dir);
  Result := (0 = ShFileOperation(fos));
end;
 
{****************************************************************}
function RenameDir(const fromDir, toDir: AnsiString): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: AnsiString;
begin
    _fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
    _toDir  := RemoveBackslashUnlessRoot(toDir) + #0#0;
    fos.wFunc  := FO_RENAME;
    fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
              FOF_SILENT or FOF_NOCONFIRMATION;
    fos.pFrom  := PAnsiChar(_fromDir);
    fos.pTo    := PAnsiChar(_toDir);
  Result := (0 = ShFileOperation(fos));
end;
 
{****************************************************************}
function FilesMaskOperation(const fromDir, toDir, fileMask: AnsiString; FileOp: Integer; EmptyDirRemove: Boolean; toRecycle: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: AnsiString;
  FSR, DSR: TFindRec;
  FindResult: Boolean;
  APath: AnsiString;
begin
  APath := AddBackslash(fromDir);
  FindResult := FindFirst(APath + fileMask, FSR);
  try
    while FindResult do
    begin
      if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        begin
          Case FileOp of
            FO_COPY:
              begin
                fos.wFunc  := FO_COPY;
              end;
            FO_MOVE:
              begin
                fos.wFunc  := FO_MOVE;
              end;
            FO_DELETE:
              begin
                fos.wFunc  := FO_DELETE;
                if toRecycle then fos.fFlags := fos.fFlags or FOF_ALLOWUNDO;
              end;
            FO_RENAME:
              begin
                fos.wFunc  := FO_RENAME;
              end;
          else
            ;
          end;
            fos.fFlags := fos.fFlags or FOF_FILESONLY or FOF_SILENT or
                   FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
            _fromDir:= APath + FSR.Name + #0#0;
            _toDir:= AddBackslash(toDir) + FSR.Name + #0#0;
            ForceDirectories(ExtractFilePath(_toDir));
            fos.pFrom  := PAnsiChar(_fromDir);
            fos.pTo    := PAnsiChar(_toDir);
            Result := (0 = ShFileOperation(fos));
        end;
      FindResult := FindNext(FSR);
    end;
    FindResult := FindFirst(APath + '*.*', DSR);
    while FindResult do
    begin
      if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
        not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} FilesMaskOperation(APath + DSR.Name, AddBackslash(toDir) + DSR.Name, fileMask, FileOp, EmptyDirRemove, toRecycle);
      FindResult := FindNext(DSR);
    end;
  finally
    FindClose(FSR);
    FindClose(DSR);
    if EmptyDirRemove then RemoveDir(APath);
  end;
end;
 
function CopyFiles(const fromDir, toDir, fileMask: AnsiString): Boolean;
begin
  Result := FilesMaskOperation(fromDir, toDir, fileMask,
         FO_COPY, False, False);
end;
 
function MoveFiles(const fromDir, toDir, fileMask: AnsiString): Boolean;
begin
  Result := FilesMaskOperation(fromDir, toDir, fileMask,
         FO_MOVE, True, False);
end;
 
function DelFiles(const fromDir, fileMask: AnsiString; toRecycle: Boolean ): Boolean;
begin
  Result := FilesMaskOperation(fromDir, '', fileMask,
         FO_DELETE, True, toRecycle);
end;
{****************************************************************}
{****************************************************************}
 

 

Всего записей: 1227 | Зарегистр. 22-04-2007 | Отправлено: 17:21 14-03-2019 | Исправлено: AlexALSP, 17:44 14-03-2019
Magellano

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я тут у себя химичил и все же получилось обойти вложенность папок при восстановлении.  

спасибо. Как-нибудь проверю.  
 
Я воспользовался данным вариантом. Отрабатывает отлично, а чего еще желать?
 

Код:
[Files]
Source: "X:\path"; DestDir: "{app}"; BeforeInstall: "BackupFile()"
 
 
[Code]
procedure BackupFile();
var
file, backFile, backpath: string;
begin
if FileExists(ExpandConstant(CurrentFileName)) then
begin
File := ExpandConstant(CurrentFileName);
backpath := file;
StringChangeEx(backpath, ExpandConstant('{app}'), '', True);
backFile := ExpandConstant('{app}\Backup') + backpath;
ForceDirectories(ExtractFilePath(backfile));
RenameFile(file, backfile);
end;
end;
 
procedure RestoreBackup(backDir: string);
var
  res : integer;
  todir : string;
begin
  todir := ExpandConstant('{app}');
  Exec('cmd.exe', ' /C XCOPY ' + AddQuotes(backDir) + ' ' + AddQuotes(ToDir) + ' ' + '/E /I', ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
  DelTree(backDir, true, true, true);
end;
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usdone then
begin
RestoreBackup(ExpandConstant('{app}\Backup'));
end;
end;

Всего записей: 109 | Зарегистр. 08-02-2016 | Отправлено: 14:16 22-03-2019 | Исправлено: Magellano, 14:18 22-03-2019
brduakhTMP



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://www.jrsoftware.org/isdl.php - 6.0.2 Stable
http://www.jrsoftware.org/files/is6-whatsnew.htm - Changelog
http://files.jrsoftware.org/ispack/innosetup-qsp-6.0.2.exe
http://files.jrsoftware.org/is/6/innosetup-6.0.2.exe

Всего записей: 6856 | Зарегистр. 20-04-2016 | Отправлено: 18:54 30-04-2019
aleserst



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inno Setup Compiler_6.0.2_RUS
 

 
Скачать Ссылка

Всего записей: 187 | Зарегистр. 17-03-2019 | Отправлено: 00:18 05-05-2019 | Исправлено: aleserst, 20:04 06-05-2019
brduakhTMP



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aleserst
очень нужно знать, пару слов... данный компилятор, понятен и без русификации, особенно, если язык заложен в exe, а потом баги итп...


всем кто пользуется, подскажите, как сделать, чтобы компилятор, менял путь автоматом, к примеру:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\EA GAMES\Need for Speed Most Wanted
Install Dir=C:\NFSMW\
Suppression Exe=C:\NFSMW\nfs.exe
вот выбрал человек вместо:
C:\NFSMW\ на D:\NFSMW\ и чтобы это значение поменялось тоже в реестре...
заранее спасибо!

Всего записей: 6856 | Зарегистр. 20-04-2016 | Отправлено: 19:55 08-05-2019
aleserst



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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


Цитата:
всем кто пользуется, подскажите, как сделать, чтобы компилятор, менял путь автоматом, к примеру:  

Всё же вам не всё понятно без русификации. Может прочтёте Русскую справку к Inno Setup v6.0.0
https://yadi.sk/d/aIme10_Lk0z1mQ
Багов здесь не обнаружено Inno Setup Compiler_6.0.2_RUS. А потом - БУДЕТ ПОТОМ....

Всего записей: 187 | Зарегистр. 17-03-2019 | Отправлено: 21:12 08-05-2019
brduakhTMP



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aleserst
если русифицировать компилятор, там нужного нет...

Всего записей: 6856 | Зарегистр. 20-04-2016 | Отправлено: 19:36 09-05-2019
innonewbie

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
всем кто пользуется, подскажите, как сделать, чтобы компилятор, менял путь автоматом, к примеру

Пример:
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Install Dir; ValueData: {app};
Это
Цитата:
Suppression Exe=C:\NFSMW\nfs.exe  
по аналогии {app}\nfs.exe  

Всего записей: 168 | Зарегистр. 30-12-2010 | Отправлено: 10:48 12-05-2019
MisterMyth

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Увидел, что вышла версия 6.0: поэтому хочу задать несколько вопросов:
1) Может кто нибудь подсказать: если установщик приложения скомпилирован в шестой версии, то можно ли будет установить программу на XP?
2) Может кто помочь воссоздать Inno Setup Ultra, но более обновленную версию. Хотя бы инструкцию дайте пожалуйста, потому что не не очень хорошо следил за тем, какие компоненты устарели и не обновляются или не нужны.
Спасибо.

Всего записей: 1041 | Зарегистр. 03-01-2015 | Отправлено: 10:27 19-05-2019
Bannan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisterMyth:
1) Нет.
2) Скорее всего нет. Эта сборка базируется на проекте ResTools, который не развивается с 2012 года. Для обновления компонентов попробуйте обратиться к автору сборки LexBell. Но повторю еще раз, основной набор инструментов и утилит очень давно не обновлялся и больше не поддерживается.

Всего записей: 507 | Зарегистр. 30-07-2011 | Отправлено: 12:40 19-05-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup - создание инсталляционных пакетов (Часть 15)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru