|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме 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 |
|
Ветеран Сообщения: 862
|
Профиль | Отправить 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 '[email protected] 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 '[email protected] 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 '[email protected] 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 '[email protected] 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 | |
|