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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 06-06-2020
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме
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.3.0 [17.01.2015] - Скачать;



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

Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z
Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z
Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 04-04-2018

 

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


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

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


Цитата Nordek:
Ярлыки и папки общего рабочего стола »
Спасибо за ссылку, но там на вопрос того пользователя так и не ответили.
Для информации: ОС, на которой проверялся скрипт, "Win10 Домашняя" лицензионная.
Может кто-то сталкивался с подобного рода проблемой?

Отправлено: 19:18, 19-05-2020 | #631



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

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


SHVtYW4=


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

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


Цитата Log 101:
Может кто-то сталкивался с подобного рода проблемой? »
При вашем скрипте: В Windows 7 из сторонней программы через Файл » Открыть/File » Open - ярлыки видны, в Windows 10 - не видны и это нормально, используйте {userdesktop}. Недоразумение никак не связано с Inno Setup, проблему ищите в самой Windows.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.

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

Отправлено: 21:56, 19-05-2020 | #632


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


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

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


Если проблему не обойти, подскажите, пожалуйста, как в скрипте зашить проверку на версию Windows. И если Win7/ХР, то чтобы установка сама шла в {commondesktop}, если же Win10, то в {userdesktop}. Остается тогда вопрос: куда отнести Win8...

Но тогда предвижу еще одну проблему: если ставить будет Админ под своим логином, а не Пользователь, то ярлык будет у Админа, а у Пользователя (для которого вся установка) ярлыка не будет.

Последний раз редактировалось Log 101, 20-05-2020 в 05:56.


Отправлено: 05:44, 20-05-2020 | #633


Аватара для mig73

Ветеран


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

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


Возможно открою Африку, но именно в Win10 ярлык именно на Панели задач создать пока невозможно. Остальные ярлыки создаются без вопросов хоть где на любой ОС, исключая Панель задач Win10.

Отправлено: 07:35, 20-05-2020 | #634


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


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

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


Цитата mig73:
Возможно открою Африку, но именно в Win10 ярлык именно на Панели задач создать пока невозможно. Остальные ярлыки создаются без вопросов хоть где на любой ОС, исключая Панель задач Win10. »
Программа MPC-BE, Bandicam 4.5.8.1673 Repack elchupacabra при установки создают ярлык на панели задач в Win10

Отправлено: 14:32, 30-05-2020 | #635


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


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

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


Как сделать, чтобы при повторной установке из созданного инсталлятора, если папка с файлами существует, в папке куда программу устанавливаю, то файлы во вложенной папке не перезаписывались? Но только в этой папке, а другие файлы и папки не заменялись при установке.
Спасибо.

Отправлено: 13:32, 13-06-2020 | #636


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


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

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


Как убрать кнопку с выбором типа установки?
Полная установка
Компактная установка
Выборочная установка

Отправлено: 17:09, 13-06-2020 | #637


Аватара для habib2302

Ветеран


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

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


passstrada, в скрипте в разделе Types уберите все кроме "Полная установка" и поставьте флаг Flags: iscustom

Код: Выделить весь код
[Types]
Name: full; Description: Полная установка; Flags: iscustom

-------
Помог? От "Полезное сообщение" не откажусь!!!

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

Отправлено: 17:18, 13-06-2020 | #638


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


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

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



Резервное копирование изменяемых оригинальных файлов для последующего восстановления.

Решил удалить свои старые сообщения, связать их в кучу, и прикрепить сюда (что бы не мусорить).
Здесь пытался найти ответ на:
13.06.2020 в 12:39

Хочу создать модпак, и столкнулся с такой вот идеей
Нужно что бы во время установки мода в указанную папку, и выборе модификаций, делалось backup оригинальных файлов в папку backup с bat файлом, который отправится на рабочий стол.
Допустим я выбираю Мод1 в котором файлы:
Скрытый текст

*\Data\Gfx2\UI\BattleScreenHUD\Arrow.txt
*\Data\Gfx2\UI\BattleScreenHUD\capturebaseicon.txt
*\Data\Gfx2\UI\BattleScreenHUD\ChatCommandsOuterSectorBg.txt
*\Data\Gfx2\UI\BattleScreenHUD\markers\explosion_bk.txt
*\Data\Gfx2\UI\BattleScreenHUD\markers\standart_damage_marker.txt


И оригинал этих файлов отправился в папку backup:
Скрытый текст

*\Data\Gfx2\UI\BattleScreenHUD\Arrow.txt
*\Data\Gfx2\UI\BattleScreenHUD\capturebaseicon.txt
*\Data\Gfx2\UI\BattleScreenHUD\ChatCommandsOuterSectorBg.txt
*\Data\Gfx2\UI\BattleScreenHUD\markers\explosion_bk.txt
*\Data\Gfx2\UI\BattleScreenHUD\markers\standart_damage_marker.txt


И так далее, при выборе Мод2 копия оригинала в backup...

Зачем это делать?
На рабочем столе будет создан ярлык bat файла, который при открытии будет делать замену файлов, на оригинальные файлы (которые и будут храниться в папке backup)
Или не батник, а допустим какой-то exe файл.

Не чего особо не нагуглил, что подскажите?

13.06.2020 в 19:45

Подскажите пожалуйста
Я всё же интересуюсь сделать backup файлов, которые заменяет, это так скажем "обновление"
Нашел такой вот код? Что скажите?
Скрытый текст
Код: Выделить весь код
[Files]
Source: Files\*.*; DestDir: {app}; Flags: ignoreversion recursesubdirs; BeforeInstall: CreateBackup

[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;

Мой код:
Скрытый текст
Код: Выделить весь код
#define AppName "Modpack"
#define AppVer "v1.0"

[Setup]
AppName={#AppName}
AppVerName=Modpack {#AppVer}
AppVersion={#AppVer}
DefaultDirName=Data

Compression=none

OutputDir=C:\Users\vladi\Desktop 
OutputBaseFilename={#AppName} {#AppVer}
InfoBeforeFile=readme.rtf                       
SetupIconFile=SetupIconFile.ico
WizardSmallImageFile=WizardSmallImageFile.bmp

DisableProgramGroupPage=yes
DisableFinishedPage=True
DisableReadyPage=True

CreateUninstallRegKey=no
Uninstallable=no

[Languages]
;Язык по умолчанию интерфейса установщика
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Messages]
SelectDirLabel3=Укажите папку с игрой

[Icons]
;Создание ярлыка на рабочем столе после успешной установки приложения
Name: "{commondesktop}\Вернуть оригинальные файлы"; IconFilename: bat.ico; Filename: "{app}\_backup\backup.bat"

[InstallDelete]
;Файлы\папки которые должны удалится при Установке приложения

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Components]
Name: mods; Description: Выберите модификации:;
Name: mods\pritsel; Description: Прицелы:;
Name: mods\pritsel\1; Description: Прицел CrosINC; Flags: exclusive
Name: mods\pritsel\2; Description: Прицел Дамоклов Меч; Flags: exclusive
Name: mods\pritsel\3; Description: Прицел White_v3.1; Flags: exclusive

Name: mods\angar; Description: Ангары:;
Name: mods\angar\1; Description: Ангар Brotherhood Sanctuary; Flags: exclusive
Name: mods\angar\2; Description: Ангар Hangar_WOT; Flags: exclusive
Name: mods\angar\3; Description: Ангар на карте Мираж; Flags: exclusive

[Files]
Source: C:\Mods\pritsel\crosinc\*; Components: mods\pritsel\1; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Mods\pritsel\damoklov-mech\*; Components: mods\pritsel\2; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Mods\pritsel\white\*; Components: mods\pritsel\3; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Source: C:\Mods\angar\Brotherhood-Sanctuary\*; Components: mods\angar\1; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Mods\angar\Hangar_WOT\*; Components: mods\angar\2; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Mods\angar\miragg\*; Components: mods\angar\3; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

;Файлы, Оформление окон
Source: "VclStylesinno.dll"; DestDir: {app}; Flags: dontcopy
Source: "SmokeyQuartzKamri.vsf"; DestDir: {app}; Flags: dontcopy

;Файлы, Splash
Source: "isgsg.dll"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy nocompression
Source: "splash.png"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy nocompression

[Code
//Процедура, Оформление окон
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall';
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

//Процедура, Splash 
procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

//Функция, Оформление окон
function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('SmokeyQuartzKamri.vsf');
  LoadVCLStyle(ExpandConstant('{tmp}\SmokeyQuartzKamri.vsf'));
  Result := True;
end;
procedure DeinitializeSetup();
begin
  UnLoadVCLStyles;
end;

//Функция, Splash
procedure InitializeWizard();
begin
  ExtractTemporaryFile('splash.png');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\splash.png'),1000,3000,1000,0,255,True,$FFFFFF,10);
end;


13.06.2020 в 21:08

Есть вторая идея которую довольно реально решить.
При установке, старые файлы переименовать.
А в батнике сделать наоборот, удалять новый файл, а старый переименовать обратно.
Что думаете? Как лучше?

14.06.2020 в 10:41

Нашел такой вот код, на просторах интернета.
Помогите втулить в свой код, а то у меня ошибки, то на PChar в первом случаи, то на MoveFile во втором.

При инсталляции, в "бэкап" сохраняются (перемещением) только те файлы,которые инсталлятор заменяет.
При удалении, эти же файлы восстанавливаются (тоже перемещением).
Скрытый текст
Код: Выделить весь код
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}\Install_Rus\Backup\'), ExpandConstant('{app}'));
    RemoveDir(ExpandConstant('{app}\Install_Rus\Backup\'));
    RemoveDir(ExpandConstant('{app}\Install_Rus\'));
  end;
end;

Скрытый текст
Код: Выделить весь код
procedure CreateBackup;
var
  srcFile, destFile: string;
  basePath, shortPath: string;
begin
  if IsTaskSelected('src') then
  begin
    basePath := ExpandConstant('{app}');
    srcFile := ExpandConstant(CurrentFileName);
    shortPath := srcFile;
    StringChangeEx(shortPath, basePath, '', True);
    destFile := ExpandConstant('{app}\Install_Rus\Backup') + shortPath;
    ForceDirectories(ExtractFilePath(destFile));
    MoveFile(PChar(srcFile), PChar(destFile));
  end;
end;


13.06.2020 в 21:08

Что-то вышло, с вот таким вот кодом:
Скрытый текст
Код: Выделить весь код
//Backup
function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
if IsTaskSelected('src') then
begin
  basePath := ExpandConstant('{app}');
    srcFile := ExpandConstant(CurrentFileName);
    shortPath := srcFile;
   StringChangeEx(shortPath, basePath, '', True);
   destFile := ExpandConstant('{app}\Backup') + shortPath;
 ForceDirectories(ExtractFilePath(destFile));
 MoveFile(PAnsiChar(srcFile), PAnsiChar(destFile));
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if CurUninstallStep = usPostUninstall then
begin
  MoveDir(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}'));
  RemoveDir(ExpandConstant('{app}\Backup\'));
end;
end;

Что думаете?
Вроде работает

Ну и я нашел ответ на этот вопрос, и решил поделится с вами:

Моя проблема решилась. Код программы работает отлично.

Для лучшего понимания как работает и для чего нужен:
Допустим вы устанавливаете модификации или обновление на программу или игру, и вам нужно что бы старые файлы сохранились, а в последующем вернулись, если что-то пойдёт не так.
(По началу я думал создать Батник для восстановления файлов, но лучшим способом всё-таки получилось через uninstall).
При установке, в корне программы/игры, создается папка "Backup", туда же помещается наш uninstall.
В итоге при удалении "обновления" старые файлы возвращаются на своё место, новые же удаляются + папка Backup удаляется.

Так как у меня вызывало ошибки на "PChar", я уже прочитав руководство, и изменил на "PAnsiChar", в SHFileOperation.iss:
Руководство: Unicode Pascal Scripting notes: The Unicode compiler sees type 'String' as a Unicode string, and 'Char' as a Unicode character. Its 'AnsiString' type hasn't changed and still is an ANSI string. Its 'PChar' type has been renamed to 'PAnsiChar'.

Для тех кто сюда зайдёт, прикладываю файл и код, может пригодится кому-то в будущем.
Код который вы будите использовать в своем коде:
Скрытый текст
Код: Выделить весь код
;Подключаем и выполняем указанный файл
#include "SHFileOperation.iss"

[Setup]
;Создание инсталлятора
Uninstallable=yes
;Куда поместить деинсталлятор
UninstallFilesDir={app}\Backup

[Messages]
;Изменение сообщений в установщике
ConfirmUninstall=Вы действительно ходите вернуть оригинальные файлы?
UninstalledAll=Оригинальные файлы восстановлены!

[Icons]
;Создание ярлыка на рабочем столе после успешной установки приложения
Name: "{commondesktop}\Вернуть оригинальные файлы"; IconFilename: "{app}\Backup\backup.ico"; Filename: "{app}\Backup\unins000.exe"

[Tasks]
;Если хотите, что бы спрашивалось, "Сделать Бэкап заменяемых файлов?" в установке, уберите ";" для активации функции
;Name: src; Description: Сделать Бэкап заменяемых файлов?
; + ОБЯЗАТЕЛЬНО убрать в [C0de] "//". Смотрите ниже

[_Code]
//Начало кода, Backup
function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
//begin //Для активации кнопки для Бэкапа убрать в начале begin "//". И в [Tasks] перед Name убрать ";"
//if IsTaskSelected('src') then //Для активации кнопки для Бэкапа убрать в начале if "//". И в [Tasks] перед Name убрать ";"
begin
  basePath := ExpandConstant('{app}');
    srcFile := ExpandConstant(CurrentFileName);
    shortPath := srcFile;
   StringChangeEx(shortPath, basePath, '', True);
   destFile := ExpandConstant('{app}\Backup') + shortPath; //Создание папки под названием "Backup" в программе. Те файлы которые будут ЗАМЕНЕНЫ отправятся в эту папку
 ForceDirectories(ExtractFilePath(destFile));
 MoveFile(PAnsiChar(srcFile), PAnsiChar(destFile));
end;
//end; //Для активации кнопки для Бэкапа убрать в начале end; "//". И в [Tasks] перед Name убрать ";"

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if CurUninstallStep = usPostUninstall then
begin
  MoveDir(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}')); //От куда брать файлы при восстановлении бэкапа
  RemoveDir(ExpandConstant('{app}\Backup')); //При uninstall удалятся указанная папка Backup
end;
end;
//Конец кода, Backup

+ прилаживаю файл в архиве, который нужен для подключения: SHFileOperation.zip

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

Отправлено: 23:16, 14-06-2020 | #639


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


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

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


Помогите пожалуйста как прописать два раза команду:procedure InitializeWizard();
procedure InitializeWizard();
begin
RedesignWizardForm;
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('CallbackCtrl.dll');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('volmax.png');
ExtractTemporaryFile('volmin.png');
ExtractTemporaryFile('voldote.png')
ExtractTemporaryFile('volpb.png')
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('music.mp3');

BASS_Init('{tmp}\music.mp3')
BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 70, 325)
end;

procedure DeinitializeSetup();
begin
Bass_DeInit;
gdipShutdown
end;

Отправлено: 11:14, 17-06-2020 | #640



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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




 
Переход