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

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

 

Забанен


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

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


спс.

Цитата Vanadiy777:
Если файлов, то как то так:
Код:
[Files]
Source: "{app}\File,1.exe"; DestDir: "{app}"; DestName: "File.exe"; Check: "IsWin64"; Flags: ignoreversion
Source: "{app}\File,2.exe"; DestDir: "{app}"; DestName: "File.exe"; Check: "not IsWin64"; Flags: i »
+

В секции setup:
Код: Выделить весь код
[Setup]
ArchitecturesInstallIn64BitMode=x64
как я понял.

Последний раз редактировалось serg5, 21-10-2022 в 18:49.


Отправлено: 19:24, 14-10-2022 | #841



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

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


Аватара для Vanadiy777

Ветеран


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

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


Цитата serg5:
В секции setup:
как я понял.»
Да, все верно.

Если этот параметр у Вас указан:
Код: Выделить весь код
[Setup]
DefaultDirName={pf}\MyProgram
ArchitecturesInstallIn64BitMode=x64
то программа будет установлена в C:\Program Files\MyProgram
и ключ деинсталляции будет прописан в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram_is1

Если параметр не указан:
Код: Выделить весь код
[Setup]
DefaultDirName={pf}\MyProgram
то программа будет установлена в C:\Program Files (x86)\MyProgram
и тогда ключ деинсталляции будет прописан, соответственно, в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram_is1

-------
Подписываюсь крестиком... Но кнопочку "Полезное сообщение" все равно нажмите...

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

Отправлено: 00:00, 15-10-2022 | #842


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


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

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


Хочу генерировать путь установки динамически, считывая путь игры из реестра. Если запись в реестре отсутствует, то выдавать предупреждение. Написал так:
Код: Выделить весь код
procedure CurPageChanged(CurPageID: Integer);
var sd: string;
begin   
 if CurPageId = wpSelectDir then
  sd := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432Node\Bethesda Softworks\Oblivion,Installed Path|{#NOT_FOUND}}');

  if sd = '{#NOT_FOUND}' then
    sd := ExpandConstant('{reg:HKLM\SOFTWARE\Bethesda Softworks\Oblivion,Installed Path|{#NOT_FOUND}}')

  if sd = '{#NOT_FOUND}' then begin
    sd := NoSD('') + '{#MyAppName}';
    MsgBox('Текст предупреждения', mbInformation, MB_OK);
  end

  WizardForm.DirEdit.Text := sd;
end;
Текст при этом в поле пути подставляется, все хорошо.
Скрытый текст

Но потом он куда-то теряется, и на последнем экране запись о пути пустая.
Скрытый текст

Более того, путь сбрасывается при переходе на следующую страницу, причем переменная {app} имеет корректный путь.
Скрытый текст


Если я пропишу путь напрямую
Код: Выделить весь код
WizardForm.DirEdit.Text := 'D:\Games\Oblivion';
и попробую его изменить в инсталяторе.
Скрытый текст

То на выходе путь не меняется.
Скрытый текст


Что я делаю не так?

Последний раз редактировалось EdMSL, 21-10-2022 в 17:31.


Отправлено: 17:16, 21-10-2022 | #843


Аватара для Gnom_aka_Lexander

Ветеран


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

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


EdMSL, Если путь присваивается правильно, то вероятно поможет вызвать функцию
UpdateReadyMemo
Код: Выделить весь код
 function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
Из справки:
Если инсталлятор обнаружит функцию UpdateReadyMemo в Pascal-скрипте, она вызоается автоматически, когда активизируется страница мастера Все готово к установке.
Для отображения на странице Все готово к установке в виде строк, разделенных параметром NewLine.
Параметр Space содержит строку с пробелами. Инсталлятор использует эту строку для задания установок.
Другие параметры содержат (возможно пустые) строки, которые инсталлятор может использовать в качестве секций установок.
Например, параметр MemoDirInfo содержит строку для определения секции Выбор папки.
Тоесть, после присвоение новой папки установки, нужно вызвать
Код: Выделить весь код
UpdateReadyMemoo(' ', 'разделитель строк', 'информация пользователя', 'папка установки', 'тип установки', 'список компонентов', 'группа в меню пуск', 'выбранные задачи');
То, что не нужно указывать, заменить пустыми кавычками : ''.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Отправлено: 22:31, 21-10-2022 | #844


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


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

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


Цитата Gnom_aka_Lexander:
Если путь присваивается правильно, то вероятно поможет вызвать функцию »
Не помогло. Значение MemoDirInfo пустое.

Отправлено: 07:13, 22-10-2022 | #845


Аватара для nik1967

Старожил


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

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


EdMSL, предоставь значения #NOT_FOUND и #MyAppName. А так же процедуру NoSD - искать не охота. А лучше весь скрипт выложи.

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".


Отправлено: 08:51, 23-10-2022 | #846


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


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

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


Код скрипта:
Скрытый текст

Код: Выделить весь код
#define MyAppName "My Game"
#define MyAppVersion "1.0"
#define NOT_FOUND "notFound";

[Setup]
AppId={{ADF6076C-BDF7-4515-8D60-17F9DBAD5B41}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={code:NoSD}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=MyGameSetup
Compression=none
SolidCompression=yes
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
DisableProgramGroupPage=yes
SetupLogging=yes
DirExistsWarning=no

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked


[Files]
Source: "D:\MyGame\*"; DestDir: "{app}"; Flags: ignoreversion

[Dirs]
Name: "{app}\saves"

[Code;]
function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PAnsiChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
  DRIVE_FIXED = 3;
  TH32CS_SNAPPROCESS = $2;
  INVALID_HANDLE_VALUE = -1;

var ChooseVersionPage: TInputOptionWizardPage;

function NoSD(s: string): string;
var
  x, bit, i: Integer;
  tp: Cardinal;
  sd: string;
begin
  sd:= ExpandConstant('{sd}');
  Result:= sd;
  x:= GetLogicalDrives;
  if x <> 0 then
  for i:= 1 to 64 do
    begin
      bit:= x and 1;
      if bit = 1 then
        begin
          tp:= GetDriveType(PAnsiChar(Chr(64 + i) + ':'));
          if tp = DRIVE_FIXED then
          if Chr(64 + i) <> Copy(sd, 1, 1) then
            begin
              Result:= Chr(64 + i) + ':';
              Break;
            end;
        end;
      x:= x shr 1;
    end;
end;

function doubleSlash(Param: string): string;
var
    sd: string;
    i: byte;
begin
  sd := Param;
  i := 1;

  while i < length(sd) + 1 do begin
    if sd[i] = '\' then begin
      insert('\', sd, i);
      i := i + 2;
    end
    else begin
     i := i + 1;
    end;
  end;

  Result := sd;
end;

function IsStringCyrillic(Str: String): Boolean;
var
    objRegExp: Variant;
begin
    try
        objRegExp := CreateOleObject('VBScript.RegExp');
    except
        ShowExceptionMessage;
    end;

    if objRegExp.Test(Str) then
    begin
        objRegExp.Pattern := '[\u0400-\u04FF,\u0500-\u052F,\u2DE0-\u2DFF,\uA640-\uA69F]';
        Result := objRegExp.Execute(Str).Count = 1;
    end;
end;

function IsProcessRunning(FileName: String): Boolean;
var
  objSWbemLocator, objSWbemServices: Variant;
begin
  try
    objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  except
    ShowExceptionMessage;
    Exit;
  end;
  objSWbemServices := objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel := 3;
  Result := (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end;

procedure closeSteam(isUninstall: boolean);
var
i: integer;
str: string;
begin
  if isUninstall then
    str := 'удаления'
  else
    str := 'установки';

  MsgBox('Steam.exe запущен. Перед началом ' + str + ' процесс должен быть завершен.' #13#13 'Закройте его самостоятельно, либо процесс будет завершен принудительно.', mbInformation, MB_OK)
  Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Steam.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
end;

function GetSystemMetrics (nIndex: Integer): Integer; external 'GetSystemMetrics@User32.dll stdcall setuponly';

Const
  SM_CXSCREEN = 0;
  SM_CYSCREEN = 1;

function getScreenSize(Param: string): string;
begin
  if Param = 'w' then
    begin
      try
        Result := IntToStr(GetSystemMetrics(SM_CXSCREEN));
      except
        Result := '640';
      end
    end
  else 
    begin
      try
        Result := IntToStr(GetSystemMetrics(SM_CYSCREEN));
      except
        Result := '480';
      end
    end
end;

function IsIncludeToInstall(GameType: integer): Boolean;
begin
  Result := (GameType = ChooseVersionPage.SelectedValueIndex)
end;

function GetGamePathFromRegistry(): String;
begin
  Result := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432Node\Bethesda Softworks\Oblivion,Installed Path|{#NOT_FOUND}}');

  if Result = '{#NOT_FOUND}' then
    Result := ExpandConstant('{reg:HKLM\SOFTWARE\Bethesda Softworks\Oblivion,Installed Path|{#NOT_FOUND}}')
end;

procedure InitializeWizard;
begin
  ChooseVersionPage := CreateInputOptionPage(wpWelcome,
    'Выбор версии игры', 'Какая версия игры берется за основу?', '',
    True, False);
  ChooseVersionPage.Add('1С');
  ChooseVersionPage.Add('Steam');
  ChooseVersionPage.Add('GOG');

  ChooseVersionPage.SelectedValueIndex := 0;
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
var
  GameType: String;
begin
  case ChooseVersionPage.SelectedValueIndex of
    0: GameType := '1C';
    1: GameType := 'Steam';
    2: GameType := 'GOG';
  end;
  SetPreviousData(PreviousDataKey, 'GameType', GameType);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var installPath: string;
begin
  Result := True;

  if CurPageID = ChooseVersionPage.ID then begin
    if (ChooseVersionPage.SelectedValueIndex = 1)
    and (ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432Node\Valve\Steam,InstallPath|{#NOT_FOUND}}') = '{#NOT_FOUND}')
    and (ExpandConstant('{reg:HKLM\SOFTWARE\Valve\Steam,InstallPath|{#NOT_FOUND}}') = '{#NOT_FOUND}') then
      Result := MsgBox('Steam.exe не найден' #13#13 'Все равно продолжить?', mbError, MB_YESNO) = idYes
  end

  if CurPageID = wpSelectDir then
    if (IsStringCyrillic(WizardForm.DirEdit.Text)) then
    begin
      MsgBox('В пути установки присуствуют русские символы'+#13#10+'Пожалуйста, повторите ввод.', mbError, mb_Ok);
      Result := False;
    end
    else begin
      installPath := GetGamePathFromRegistry();
      log(installPath)  ;
      if (installPath <> '{#NOT_FOUND}') and (installPath <> WizardDirValue) then
        MsgBox('Указанный путь установки отличается от пути, приписанного для игры в реестре.' #13#13 'Корректная работа ' + '{#MyAppName}' + ' не гарантируется.', mbConfirmation, mb_Ok);
    end

  if CurPageID = wpSelectComponents then
    MsgBox('WizardDirValue: ' + WizardDirValue +#13#10+'App: ' + ExpandConstant('{app}'), mbError, mb_Ok);
end;

procedure CurPageChanged(CurPageID: Integer);
var sd: string;
    //isPathFound: boolean;
begin   
 if CurPageId = wpSelectDir then
  sd := GetGamePathFromRegistry();

  if sd = '{#NOT_FOUND}' then begin
    sd := NoSD('') + '\{#MyAppName}';
    MsgBox('Запись об установленной игре отсутствует в реестре Windows.' #13#13 'Возможно, игра была установлена, но ее запуск не был произведен, либо игра установлена некорректно.' #13#13 'Корректная работа ' + '{#MyAppName}' + ' не гарантируется.', mbInformation, MB_OK);
  end

  WizardForm.DirEdit.Text := sd;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep = ssInstall) and (ChooseVersionPage.SelectedValueIndex = 1) and IsProcessRunning('Steam.exe') then
    closeSteam(false)
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Value: String;
begin
log(GetPreviousData('GameType', ''));
  if (CurUninstallStep = usUninstall)
  and (GetPreviousData('GameType', '') = 'Steam')
  and IsProcessRunning('Steam.exe') then
    closeSteam(true)
end;

Директивы Files, Components и т.д. удалил, чтобы не захлмлять. К проблеме отношения все равно не имеют.

Последний раз редактировалось EdMSL, 23-10-2022 в 09:03.


Отправлено: 08:53, 23-10-2022 | #847


Аватара для nik1967

Старожил


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

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


EdMSL,
Скрытый текст

Код: Выделить весь код
#define MyAppName "My Game"
#define MyAppVersion "1.0"
#define NOT_FOUND "notFound";

[Setup]
AppId={{ADF6076C-BDF7-4515-8D60-17F9DBAD5B41}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={code:NoSD}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=MyGameSetup
Compression=none
SolidCompression=yes
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=2100000000
DiskClusterSize=4096
DisableProgramGroupPage=yes
SetupLogging=yes
DirExistsWarning=no

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked


[Files]
Source: "D:\MyGame\*"; DestDir: "{app}"; Flags: ignoreversion

[Dirs]
Name: "{app}\saves"

[_Code]
function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PAnsiChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
  DRIVE_FIXED = 3;
  TH32CS_SNAPPROCESS = $2;
  INVALID_HANDLE_VALUE = -1;

var ChooseVersionPage: TInputOptionWizardPage;

function NoSD(s: string): string;
var
  x, bit, i: Integer;
  tp: Cardinal;
  sd: string;
begin
  sd:= ExpandConstant('{sd}');
  Result:= sd;
  x:= GetLogicalDrives;
  if x <> 0 then
  for i:= 1 to 64 do
    begin
      bit:= x and 1;
      if bit = 1 then
        begin
          tp:= GetDriveType(PAnsiChar(Chr(64 + i) + ':'));
          if tp = DRIVE_FIXED then
          if Chr(64 + i) <> Copy(sd, 1, 1) then
            begin
              Result:= Chr(64 + i) + ':';
              Break;
            end;
        end;
      x:= x shr 1;
    end;
end;

function doubleSlash(Param: string): string;
var
    sd: string;
    i: byte;
begin
  sd := Param;
  i := 1;

  while i < length(sd) + 1 do begin
    if sd[i] = '\' then begin
      insert('\', sd, i);
      i := i + 2;
    end
    else begin
     i := i + 1;
    end;
  end;

  Result := sd;
end;

function IsStringCyrillic(Str: String): Boolean;
var
    objRegExp: Variant;
begin
    try
        objRegExp := CreateOleObject('VBScript.RegExp');
    except
        ShowExceptionMessage;
    end;

    if objRegExp.Test(Str) then
    begin
        objRegExp.Pattern := '[\u0400-\u04FF,\u0500-\u052F,\u2DE0-\u2DFF,\uA640-\uA69F]';
        Result := objRegExp.Execute(Str).Count = 1;
    end;
end;

function IsProcessRunning(FileName: String): Boolean;
var
  objSWbemLocator, objSWbemServices: Variant;
begin
  try
    objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  except
    ShowExceptionMessage;
    Exit;
  end;
  objSWbemServices := objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel := 3;
  Result := (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end;

procedure closeSteam(isUninstall: boolean);
var
i: integer;
str: string;
begin
  if isUninstall then
    str := 'удаления'
  else
    str := 'установки';

  MsgBox('Steam.exe запущен. Перед началом ' + str + ' процесс должен быть завершен.' #13#13 'Закройте его самостоятельно, либо процесс будет завершен принудительно.', mbInformation, MB_OK)
  Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Steam.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
end;

function GetSystemMetrics (nIndex: Integer): Integer; external 'GetSystemMetrics@User32.dll stdcall setuponly';

Const
  SM_CXSCREEN = 0;
  SM_CYSCREEN = 1;

function getScreenSize(Param: string): string;
begin
  if Param = 'w' then
    begin
      try
        Result := IntToStr(GetSystemMetrics(SM_CXSCREEN));
      except
        Result := '640';
      end
    end
  else 
    begin
      try
        Result := IntToStr(GetSystemMetrics(SM_CYSCREEN));
      except
        Result := '480';
      end
    end
end;

function IsIncludeToInstall(GameType: integer): Boolean;
begin
  Result := (GameType = ChooseVersionPage.SelectedValueIndex)
end;

function GetGamePathFromRegistry(): String;
begin
  Result := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432Node\Bethesda Softworks\Oblivion,Installed Path|{#NOT_FOUND}}');

  if Result = '{#NOT_FOUND}' then
    Result := ExpandConstant('{reg:HKLM\SOFTWARE\Bethesda Softworks\Oblivion,Installed Path|{#NOT_FOUND}}')
end;

procedure InitializeWizard;
begin
  ChooseVersionPage := CreateInputOptionPage(wpWelcome,
    'Выбор версии игры', 'Какая версия игры берется за основу?', '',
    True, False);
  ChooseVersionPage.Add('1С');
  ChooseVersionPage.Add('Steam');
  ChooseVersionPage.Add('GOG');

  ChooseVersionPage.SelectedValueIndex := 0;
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
var
  GameType: String;
begin
  case ChooseVersionPage.SelectedValueIndex of
    0: GameType := '1C';
    1: GameType := 'Steam';
    2: GameType := 'GOG';
  end;
  SetPreviousData(PreviousDataKey, 'GameType', GameType);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var installPath: string;
begin
  Result := True;

  if CurPageID = ChooseVersionPage.ID then begin
    if (ChooseVersionPage.SelectedValueIndex = 1)
    and (ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432Node\Valve\Steam,InstallPath|{#NOT_FOUND}}') = '{#NOT_FOUND}')
    and (ExpandConstant('{reg:HKLM\SOFTWARE\Valve\Steam,InstallPath|{#NOT_FOUND}}') = '{#NOT_FOUND}') then
      Result := MsgBox('Steam.exe не найден' #13#13 'Все равно продолжить?', mbError, MB_YESNO) = idYes
  end;

  if CurPageID = wpSelectDir then
    if (IsStringCyrillic(WizardForm.DirEdit.Text)) then
    begin
      MsgBox('В пути установки присуствуют русские символы'+#13#10+'Пожалуйста, повторите ввод.', mbError, mb_Ok);
      Result := False;
    end
    else begin
      installPath := GetGamePathFromRegistry();
      log(installPath)  ;
      if (installPath <> '{#NOT_FOUND}') and (installPath <> WizardDirValue) then
        MsgBox('Указанный путь установки отличается от пути, приписанного для игры в реестре.' #13#13 'Корректная работа ' + '{#MyAppName}' + ' не гарантируется.', mbConfirmation, mb_Ok);
    end;

  if CurPageID = wpSelectComponents then
    MsgBox('WizardDirValue: ' + WizardDirValue +#13#10+'App: ' + ExpandConstant('{app}'), mbError, mb_Ok);
end;

procedure CurPageChanged(CurPageID: Integer);
var sd: string;
    //isPathFound: boolean;
begin   
 if CurPageId = wpSelectDir then begin
  sd := GetGamePathFromRegistry();

  if sd = '{#NOT_FOUND}' then begin
    sd := NoSD('') + '\{#MyAppName}';
    MsgBox('Запись об установленной игре отсутствует в реестре Windows.' #13#13 'Возможно, игра была установлена, но ее запуск не был произведен, либо игра установлена некорректно.' #13#13 'Корректная работа ' + '{#MyAppName}' + ' не гарантируется.', mbInformation, MB_OK);
  end;

  WizardForm.DirEdit.Text := sd;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep = ssInstall) and (ChooseVersionPage.SelectedValueIndex = 1) and IsProcessRunning('Steam.exe') then
    closeSteam(false)
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Value: String;
begin
log(GetPreviousData('GameType', ''));
  if (CurUninstallStep = usUninstall)
  and (GetPreviousData('GameType', '') = 'Steam')
  and IsProcessRunning('Steam.exe') then
    closeSteam(true)
end;

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".


Последний раз редактировалось nik1967, 23-10-2022 в 09:29.

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

Отправлено: 09:24, 23-10-2022 | #848


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


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

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


nik1967, Спасибо. Тяжело без линтера жить.

Отправлено: 09:34, 23-10-2022 | #849


Аватара для Vanadiy777

Ветеран


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

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


Коллеги, всех приветствую от души!
Подскажите, пожалуйста, как правильно прописать синтаксис...
Надо добавить задачу в Планировщик заданий, вот так работает:
Код: Выделить весь код
Exec(ExpandConstant('{sys}\schtasks.exe'), '/create /f /tn "Добавление задачи" /xml '+ExpandConstant('"{app}\AddTasks.xml"'), '', SW_HIDE, ewWaitUntilTerminated, i);
Но надо чтобы текстовое значение "Добавление задачи" бралось из CustomMessages...

За ранее благодарен за помощь.

-------
Подписываюсь крестиком... Но кнопочку "Полезное сообщение" все равно нажмите...


Отправлено: 00:58, 27-10-2022 | #850



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




 
Переход