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

Компьютерный форум 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

 

Аватара для vk_k14m@vk

Старожил


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

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


Цитата El Sanchez:
ой, не все скопировал у себя, когда пост оформлял. Добавить в [Files] пустышку config.ksc: »
Теперь файл создается. Это уже хорошо. Но ошибка все еще есть.

Создается файл с таким содержимым
Код: Выделить весь код
%["saveDataLocation" => "file://./D/Games/Fate/Stay Night [Realta Nua] - Ultimate Edition/fateavedata"]
А должно быть такое
Код: Выделить весь код
(const) %[
 "saveDataLocation" => "file://./D/Games/Fate/Stay Night [Realta Nua] - Ultimate Edition/fateavedata"
]
Из-за чего игра крашится после первого запуска. А при втором запуске крашится моментально...

-------
Взялся отвечать, отвечай до конца!


Отправлено: 10:24, 14-06-2019 | #341



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

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


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

Ветеран


Contributor


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

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


Цитата vk_k14m@vk:
Из-за чего игра крашится после первого запуска. А при втором запуске крашится моментально »
vk_k14m@vk, а (const) добавить к S1 := '(const) %["saveDataLocation" => "file://./' + S1 + '"]';?
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:39, 14-06-2019 | #342


Аватара для Dodakaedr

Ветеран


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

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


Цитата vk_k14m@vk:
А должно быть такое »
Код: Выделить весь код
S1 := '(const) %['+#13' "saveDataLocation" => "file://./' + S1 + '"'+#13+']';
и добавьте еще это
Код: Выделить весь код
if not DirExists(s1) then ForceDirectories(s1);
после
Код: Выделить весь код
S1 := SaveDataLocationPage.Values[0];
в процедуре SetSaveDataLocation.

-------
Inno Setup 5 Ultra Unicode


Отправлено: 19:25, 14-06-2019 | #343


Старожил


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

Профиль | Отправить 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


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

Ветеран


Contributor


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

Профиль | Отправить 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


Старожил


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

Профиль | Отправить 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


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

Ветеран


Contributor


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

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


Цитата Bio_Hazard:
я получил рабочий, полностью удовлетворяющий мои цели скрипт »
Bio_Hazard, использование явного указания WOW6432Node в коде - это преступление против человечества, уберите все RegKeyExists, где есть WOW6432Node в параметре.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:39, 09-07-2019 | #347


Старожил


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

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


Цитата El Sanchez:
использование явного указания WOW6432Node в коде - это преступление против человечества, уберите все RegKeyExists, где есть WOW6432Node в параметре. »
Спасибо за совет, исправил.

Отправлено: 23:06, 09-07-2019 | #348


Старожил


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

Профиль | Отправить 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


Аватара для Dodakaedr

Ветеран


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

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


Цитата Bio_Hazard:
Обнаружился косяк при установке на 32-х битных системах »
Замените функцию и пробуйте
Скрытый текст
Код: Выделить весь код
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;

-------
Inno Setup 5 Ultra Unicode


Отправлено: 16:11, 16-07-2019 | #350



Компьютерный форум 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




 
Переход