|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1269 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты 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
|
Профиль | Отправить PM | Цитировать Цитата Nordek:
Для информации: ОС, на которой проверялся скрипт, "Win10 Домашняя" лицензионная. Может кто-то сталкивался с подобного рода проблемой? |
|
Отправлено: 19:18, 19-05-2020 | #631 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
SHVtYW4= Сообщения: 3451
|
Профиль | Отправить PM | Цитировать Цитата Log 101:
|
|
------- Отправлено: 21:56, 19-05-2020 | #632 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Если проблему не обойти, подскажите, пожалуйста, как в скрипте зашить проверку на версию Windows. И если Win7/ХР, то чтобы установка сама шла в {commondesktop}, если же Win10, то в {userdesktop}. Остается тогда вопрос: куда отнести Win8...
Но тогда предвижу еще одну проблему: если ставить будет Админ под своим логином, а не Пользователь, то ярлык будет у Админа, а у Пользователя (для которого вся установка) ярлыка не будет. |
Последний раз редактировалось Log 101, 20-05-2020 в 05:56. Отправлено: 05:44, 20-05-2020 | #633 |
Ветеран Сообщения: 839
|
Профиль | Отправить PM | Цитировать Возможно открою Африку, но именно в Win10 ярлык именно на Панели задач создать пока невозможно. Остальные ярлыки создаются без вопросов хоть где на любой ОС, исключая Панель задач Win10.
|
Отправлено: 07:35, 20-05-2020 | #634 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата mig73:
|
|
Отправлено: 14:32, 30-05-2020 | #635 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Как сделать, чтобы при повторной установке из созданного инсталлятора, если папка с файлами существует, в папке куда программу устанавливаю, то файлы во вложенной папке не перезаписывались? Но только в этой папке, а другие файлы и папки не заменялись при установке.
Спасибо. |
Отправлено: 13:32, 13-06-2020 | #636 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Как убрать кнопку с выбором типа установки?
Полная установка Компактная установка Выборочная установка |
Отправлено: 17:09, 13-06-2020 | #637 |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 17:18, 13-06-2020 | #638 |
Новый участник Сообщения: 10
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|