|
Компьютерный форум 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 |
Старожил Сообщения: 342
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
Создается файл с таким содержимым %["saveDataLocation" => "file://./D/Games/Fate/Stay Night [Realta Nua] - Ultimate Edition/fateavedata"] Из-за чего игра крашится после первого запуска. А при втором запуске крашится моментально... |
|
------- Отправлено: 10:24, 14-06-2019 | #341 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата vk_k14m@vk:
|
|
Отправлено: 14:39, 14-06-2019 | #342 |
Ветеран Сообщения: 858
|
Профиль | Отправить PM | Цитировать Цитата vk_k14m@vk:
|
|
------- Отправлено: 19:25, 14-06-2019 | #343 |
Старожил Сообщения: 220
|
Профиль | Отправить PM | Цитировать Здравствуйте!
Есть небольшой простой скрипт для установки мода в игру. Он делает бекап оригинальных файлов, копирует новые и создает деинсталлятор. Его необходимо немного усовершенствовать: 1. Создать резервную копию файлов Game.dll и Game_DX11.dll. 2. Скопировать в корень игры 4 файла XVI32 .cmd/.exe/.ini/.xsc 3. Выполнить XVI32.cmd 4. Удалить эти 4 файла. 5. При деинсталляции вернуть исходные Game.dll и Game_DX11.dll. Можете помочь с такой задачей? P.S. с Inno Setup (да и в принципе с программированием) не дружу совсем. Файл 158063 |
Последний раз редактировалось Bio_Hazard, 08-07-2019 в 12:19. Отправлено: 22:36, 07-07-2019 | #344 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Bio_Hazard, а пункты 2-4 это и есть усовершенствования по сравнению с "копирует новые"?
Скрытый текст
#define AppName "Game Name" [Setup] AppName={#AppName} Mod AppVersion=1.0 DefaultDirName={pf}\{#AppName} DirExistsWarning=no [Languages] Name: ru; MessagesFile: compiler:Languages\russian.isl [Files] Source: {app}\Game.dll; DestDir: {app}; DestName: Game.dll.bkp; Flags: external skipifsourcedoesntexist Source: {app}\Game_DX11.dll; DestDir: {app}; DestName: Game_DX11.dll.bkp; Flags: external skipifsourcedoesntexist Source: xvi32.*; DestDir: {app}; Flags: deleteafterinstall [Run] Filename: {app}\xvi32.cmd; Flags: runhidden shellexec skipifdoesntexist [UninstallDelete] Type: files; Name: {app}\Game.dll.bkp Type: files; Name: {app}\Game_DX11.dll.bkp [Code] procedure RestoreFromBackup(const AFileName: string); var LFileName: string; begin LFileName := ChangeFileExt(AFileName, ''); if FileExists(LFileName) then FileCopy(AFileName, ChangeFileExt(AFileName, ''), False); end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin case CurUninstallStep of usUninstall: begin RestoreFromBackup(ExpandConstant('{app}\Game.dll.bkp')); RestoreFromBackup(ExpandConstant('{app}\Game_DX11.dll.bkp')); end; end; end; |
Отправлено: 11:01, 09-07-2019 | #345 |
Старожил Сообщения: 220
|
Профиль | Отправить PM | Цитировать Цитата Bio_Hazard:
Я не знаю, почему мой архив не подгрузился (Файл 158063), но взяв большую часть Вашего кода, совместил его со "своим" и немного доработав XVI32.cmd, я получил рабочий, полностью удовлетворяющий мои цели скрипт. Может получилось немного топорно, но работает. Вот что получилось:
#define ModName "TQRagnarökMod by BioHazardN7" #define ModVersion "2.3.27" #define ModShortDescription "Модификация для Titan Quest" [Setup] AppId={{70653654-6624-42B4-B9A4-CAE370D75364} AppName={#ModName} {#ModVersion} AppVerName={#ModName} {#ModVersion} // AppPublisher=http://tqrm.zzz.com.ua // AppPublisherURL=http://tqrm.zzz.com.ua // AppSupportURL=http://tqrm.zzz.com.ua // AppUpdatesURL=http://tqrm.zzz.com.ua DefaultDirName={code:GetInstallationPath} DefaultGroupName={#ModName} DirExistsWarning=no DisableWelcomePage=no AllowNoIcons=true InfoBeforeFile=Data\Description.rtf OutputDir=Release OutputBaseFilename=TQRagnarokMod2327a_Installer SetupIconFile=Data\Icon.ico // Степень сжатия. Сильное: lzma/ultra Compression=none SolidCompression=true VersionInfoVersion={#ModVersion} // VersionInfoCompany=http://tqrm.zzz.com.ua VersionInfoDescription={#ModShortDescription} WizardImageFile=Data\Poster.bmp // VersionInfoCopyright=(c) http://tqrm.zzz.com.ua WizardSmallImageFile=Data\Logo.bmp [Languages] Name: russian; MessagesFile: compiler:Languages\Russian.isl [Files] Source: Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: CreateBackup Source: {app}\Game.dll; DestDir: {app}; DestName: Game.dll.bak; Flags: external skipifsourcedoesntexist Source: {app}\Game_DX11.dll; DestDir: {app}; DestName: Game_DX11.dll.bak; Flags: external skipifsourcedoesntexist [Run] Filename: {app}\xvi32.cmd; Flags: runhidden shellexec skipifdoesntexist [UninstallDelete] Type: files; Name: {app}\Game.dll.bak Type: files; Name: {app}\Game_DX11.dll.bak [Icons] Name: {group}\{cm:ProgramOnTheWeb,{#ModName} {#ModVersion}}; Filename: http://tqrm.zzz.com.ua Name: {group}\Последняя версия {#ModName}; Filename: http://tqrm.zzz.com.ua/ru/#download Name: {group}\The latest version of {#ModName}; Filename: http://tqrm.zzz.com.ua/en/#download Name: {group}\www.titanquest.org.ua; Filename: https://titanquest.org.ua/tqragnarokmod_by_biohazardn7 Name: {group}\vk.com; Filename: https://vk.com/tqrm_n7 Name: {group}\Telegram; Filename: https://t.me/TQRM_N7 Name: {group}\{cm:UninstallProgram,{#ModName} {#ModVersion}}; Filename: {uninstallexe} // [Messages] // BeveledLabel=http://tqrm.zzz.com.ua [code] procedure RestoreFromBackup(const AFileName: string); var LFileName: string; begin LFileName := ChangeFileExt(AFileName, ''); if FileExists(LFileName) then FileCopy(AFileName, ChangeFileExt(AFileName, ''), False); end; // DETECT PREVIOUS VERSION function InitializeSetup(): Boolean; begin Result := True; if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or RegKeyExists(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then begin Log('NEEED') //MsgBox('Для переустановки или установки новой версии - необходимо удалить предыдущую', mbInformation, MB_OK); //Result := False; end; end; // CLICKABLE LINK TO TQ SITE procedure BevelLabelClick(Sender: TObject); var ErrorCode: Integer; begin ShellExec('open','http://tqrm.zzz.com.ua','', '', SW_SHOW, ewNoWait, ErrorCode) end; procedure InitializeWizard(); begin with WizardForm do begin with BeveledLabel do begin OnClick:=@BevelLabelClick; Font.Color:=clBlue; Enabled:=True; Cursor:=crHand; end; end; end; // PAGE WITH DESTINATION procedure CurPageChanged(CurPageID: Integer); begin If CurPageID=wpSelectDir then begin WizardForm.DirEdit.Enabled := True; WizardForm.DirBrowseButton.Enabled := True; end else end; // CREATE BACKUP BEFORE INSTALL procedure CreateBackup; var srcFile, destFile: string; begin if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or RegKeyExists(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then begin // Do nothing end else begin srcFile:= ExpandConstant(CurrentFileName); destFile:= srcFile + '.bak'; DeleteFile(destFile); RenameFile(srcFile, destFile); end 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; // RESTORE BACKUP AFTER UNINSTALL procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin RestoreBackup(ExpandConstant('{app}')) end; begin case CurUninstallStep of usUninstall: begin RestoreFromBackup(ExpandConstant('{app}\Game.dll.bak')); RestoreFromBackup(ExpandConstant('{app}\Game_DX11.dll.bak')); end; end; end; end; // DETECT PATH OF INSTALLATION var InstallationPath: string; function GetInstallationPath(Param: string): string; begin { Detected path is cached, as this gets called multiple times } if InstallationPath = '' then begin if RegQueryStringValue( HKLM32, 'SOFTWARE\WOW6432Node\GOG.com\Games\1196955511', 'path', InstallationPath) then begin Log('Detected GOG installation: ' + InstallationPath); end else if RegQueryStringValue( HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150', 'InstallLocation', InstallationPath) then begin Log('Detected Steam installation: ' + InstallationPath); end else begin InstallationPath := ExpandConstant('{pf}'); MsgBox('Не удалось автоматически определить где установлена игра. В ходе установки укажите путь вручную', mbInformation, MB_OK); Log('No installation detected, using the default path: ' + InstallationPath); end; end; Result := InstallationPath; end; Спасибо за помощь! |
|
Последний раз редактировалось Bio_Hazard, 09-07-2019 в 15:47. Отправлено: 15:37, 09-07-2019 | #346 |
Ветеран Сообщения: 1269
|
Профиль | Отправить PM | Цитировать Цитата Bio_Hazard:
|
|
Отправлено: 21:39, 09-07-2019 | #347 |
Старожил Сообщения: 220
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
|
|
Отправлено: 23:06, 09-07-2019 | #348 |
Старожил Сообщения: 220
|
Профиль | Отправить PM | Цитировать Здравствуйте. Обнаружился косяк при установке на 32-х битных системах (обнаружилось на Windows 7)
Ошибка
Код инсталлятора:
#define ModName "TQRagnarökMod by BioHazardN7" #define ModVersion "2.3.27" #define ModShortDescription "Модификация для Titan Quest" [Setup] AppId={{70653654-6624-42B4-B9A4-CAE370D75364} AppName={#ModName} {#ModVersion} AppVerName={#ModName} {#ModVersion} // AppPublisher=http://tqrm.zzz.com.ua // AppPublisherURL=http://tqrm.zzz.com.ua // AppSupportURL=http://tqrm.zzz.com.ua // AppUpdatesURL=http://tqrm.zzz.com.ua DefaultDirName={code:GetInstallationPath} DefaultGroupName={#ModName} DirExistsWarning=no DisableWelcomePage=no AllowNoIcons=true InfoBeforeFile=Data\Description.rtf OutputDir=Release OutputBaseFilename=TQRagnarokMod2327a_Installer SetupIconFile=Data\Icon.ico // Степень сжатия. Сильное: lzma/ultra Compression=none SolidCompression=true VersionInfoVersion={#ModVersion} // VersionInfoCompany=http://tqrm.zzz.com.ua VersionInfoDescription={#ModShortDescription} WizardImageFile=Data\Poster.bmp // VersionInfoCopyright=(c) http://tqrm.zzz.com.ua WizardSmallImageFile=Data\Logo.bmp [Languages] Name: russian; MessagesFile: compiler:Languages\Russian.isl [Files] Source: Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: CreateBackup Source: {app}\Game.dll; DestDir: {app}; DestName: Game.dll.bak; Flags: external skipifsourcedoesntexist Source: {app}\Game_DX11.dll; DestDir: {app}; DestName: Game_DX11.dll.bak; Flags: external skipifsourcedoesntexist [Run] Filename: {app}\xvi32.cmd; Flags: runhidden shellexec skipifdoesntexist [UninstallDelete] Type: files; Name: {app}\Game.dll.bak Type: files; Name: {app}\Game_DX11.dll.bak [Icons] Name: {group}\{cm:ProgramOnTheWeb,{#ModName} {#ModVersion}}; Filename: http://tqrm.zzz.com.ua Name: {group}\Последняя версия {#ModName}; Filename: http://tqrm.zzz.com.ua/ru/#download Name: {group}\The latest version of {#ModName}; Filename: http://tqrm.zzz.com.ua/en/#download Name: {group}\www.titanquest.org.ua; Filename: https://titanquest.org.ua/tqragnarokmod_by_biohazardn7 Name: {group}\vk.com; Filename: https://vk.com/tqrm_n7 Name: {group}\Telegram; Filename: https://t.me/TQRM_N7 Name: {group}\{cm:UninstallProgram,{#ModName} {#ModVersion}}; Filename: {uninstallexe} // [Messages] // BeveledLabel=http://tqrm.zzz.com.ua [code] procedure RestoreFromBackup(const AFileName: string); var LFileName: string; begin LFileName := ChangeFileExt(AFileName, ''); if FileExists(LFileName) then FileCopy(AFileName, ChangeFileExt(AFileName, ''), False); end; // DETECT PREVIOUS VERSION function InitializeSetup(): Boolean; begin Result := True; if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or RegKeyExists(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then begin Log('NEEED') //MsgBox('Для переустановки или установки новой версии - необходимо удалить предыдущую', mbInformation, MB_OK); //Result := False; end; end; // CLICKABLE LINK TO TQ SITE procedure BevelLabelClick(Sender: TObject); var ErrorCode: Integer; begin ShellExec('open','http://tqrm.zzz.com.ua','', '', SW_SHOW, ewNoWait, ErrorCode) end; procedure InitializeWizard(); begin with WizardForm do begin with BeveledLabel do begin OnClick:=@BevelLabelClick; Font.Color:=clBlue; Enabled:=True; Cursor:=crHand; end; end; end; // PAGE WITH DESTINATION procedure CurPageChanged(CurPageID: Integer); begin If CurPageID=wpSelectDir then begin WizardForm.DirEdit.Enabled := True; WizardForm.DirBrowseButton.Enabled := True; end else end; // CREATE BACKUP BEFORE INSTALL procedure CreateBackup; var srcFile, destFile: string; begin if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') or RegKeyExists(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{70653654-6624-42B4-B9A4-CAE370D75364}_is1') then begin // Do nothing end else begin srcFile:= ExpandConstant(CurrentFileName); destFile:= srcFile + '.bak'; DeleteFile(destFile); RenameFile(srcFile, destFile); end 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; // RESTORE BACKUP AFTER UNINSTALL procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin RestoreBackup(ExpandConstant('{app}')) end; begin case CurUninstallStep of usUninstall: begin RestoreFromBackup(ExpandConstant('{app}\Game.dll.bak')); RestoreFromBackup(ExpandConstant('{app}\Game_DX11.dll.bak')); end; end; end; end; // DETECT PATH OF INSTALLATION var InstallationPath: string; function GetInstallationPath(Param: string): string; begin { Detected path is cached, as this gets called multiple times } if InstallationPath = '' then begin if RegQueryStringValue( HKLM32, 'SOFTWARE\GOG.com\Games\1196955511', 'path', InstallationPath) then begin Log('Detected GOG installation: ' + InstallationPath); end else if RegQueryStringValue( HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150', 'InstallLocation', InstallationPath) then begin Log('Detected Steam installation: ' + InstallationPath); end else begin InstallationPath := ExpandConstant('{pf}'); MsgBox('Не удалось автоматически определить где установлена игра. В ходе установки укажите путь вручную', mbInformation, MB_OK); Log('No installation detected, using the default path: ' + InstallationPath); end; end; Result := InstallationPath; end; Можете подсказать как исправить? |
Отправлено: 15:16, 16-07-2019 | #349 |
Ветеран Сообщения: 858
|
Профиль | Отправить PM | Цитировать Цитата Bio_Hazard:
Скрытый текст
function GetInstallationPath(Param: string): string; begin { Detected path is cached, as this gets called multiple times } if InstallationPath = '' then begin if RegQueryStringValue( HKLM32, 'SOFTWARE\GOG.com\Games\1196955511', 'path', InstallationPath) then begin Log('Detected GOG installation: ' + InstallationPath); end else if IsWin64 then if RegQueryStringValue( HKLM64, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150', 'InstallLocation', InstallationPath) then begin Log('Detected Steam installation: ' + InstallationPath); end else begin InstallationPath := ExpandConstant('{pf}'); MsgBox('Не удалось автоматически определить где установлена игра. В ходе установки укажите путь вручную', mbInformation, MB_OK); Log('No installation detected, using the default path: ' + InstallationPath); end; end; Result := InstallationPath; end; |
|
------- Отправлено: 16:11, 16-07-2019 | #350 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|