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

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

 

Аватара для nik1967

Старожил


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

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


niksan29,
Необходимо чтобы инсталлер, после хотя бы одной установки, в дальнейшем предлагал установку в тот же каталог, что, и ранее, подскажите как это можно организовать
Код: Выделить весь код
[Setup] 
AppName=My programm
AppVerName=My programm v1.1
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1,Path|{pf}\{#SetupSetting("AppName")}}

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

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

Отправлено: 11:26, 04-11-2019 | #381



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

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


Аватара для boss911

Alien


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

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


Цитата niksan29:
чтобы инсталлер, после хотя бы одной установки, в дальнейшем предлагал установку в тот же каталог, что, и ранее »
По умолчанию, Inno Setup всегда использует каталог предыдущей установки (UsePreviousAppDir=yes), то есть, дополнительно для этого ничего делать не нужно, при условии, если вы не меняли дефолтное значение параметров UsePreviousAppDir, CreateUninstallRegKey и Uninstallable в секции [Setup].

Все, что я вам порекомендую сделать, это включить постоянное отображение страницы выбора папки назначения:
Код: Выделить весь код
[Setup]
DisableDirPage=no
- по умолчанию значение 'auto' - страница отключается при повторной установке приложения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 04-11-2019 | #382


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


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

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


nik1967, как сказал товарищ
boss911, inno путь по умолчанию,вроде как и так запоминает, позвольте узнать,в чем отличие кода который привели Вы?
И ещё вопрос, а если перед установкой новой версии(того что ставим инсталлером, созданным с помощью inno), старую удаляем, то Inno в таком случае будет помнить путь, или нет?
И, спасибо за быстрые ответы

Последний раз редактировалось niksan29, 05-11-2019 в 08:33.


Отправлено: 08:19, 05-11-2019 | #383


Аватара для boss911

Alien


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

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


Цитата niksan29:
в чем отличие кода который привели Вы? »
В том, что ни каких каких изменений по сути проводить не нужно, так как это штатная ситуация инсталлятора, работает по умолчанию. Короче, указывать в DefaultDirName штатный параметр 'Path' в ветке реестра Uninstall - лишнее, имхо, но можно и так, только зачем.

Цитата niksan29:
если перед установкой новой версии, старую удаляем, то Inno в таком случае будет помнить путь, или нет? »
Нет. При деинсталляции штатным деинсталлятором, в реестре удаляется запись об установленном продукте, в которой содержится путь, куда был установлен этот продукт.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:09, 05-11-2019 | #384


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


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

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


Цитата boss911:
если перед установкой новой При деинсталляции штатным деинсталлятором, в реестре удаляется запись об установленном продукте, в которой содержится путь, куда был установлен этот продукт.
А вот это, как то можно обойти?
По сути как раз, это самая важная задача: это чтобы этого не происходило, т.к перед установкой обновления, обязательно надо удалять старую версию...
А т.к обновления будут выходить досточно часто, то каждый раз выбирать каталог установки по новой будет не совсем удобно, тем более инсталлеров при обновлении будет около 5-7 разово(данные разбиты по регионам, каждый устанавливает необходимые по одному, или же по очереди все).

Отправлено: 13:01, 05-11-2019 | #385


Аватара для boss911

Alien


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

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


Цитата niksan29:
т.к перед установкой обновления, обязательно надо удалять старую версию... »
Нужно больше информации, сейчас многое не ясно, посему куча вопрсов. У вас есть некий основной установленный продукт, который нужно обновлять? Что за тип обновлений, это обновление программных файлов основного ПО до новой версии или обновление некой базы/ресурсов для этого ПО? Обновления выпускаются отдельным инсталляционным пакетом или в виде полного дистрибутива ПО с уже обновленными в нем компонентами? С какой целью сначала нужно удалить старую версию обновлений (или все ПО?), перед установкой новой версии обновлений? Обновления ставятся в отдельный каталог, это строгий путь? Чем больше информации, тем лучше, на гадание и выпрашивание тут ни у кого нет времени.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:05, 06-11-2019 | #386


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


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

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


База данных для ПО, отдельные инсталляционные пакеты около 7(число может меняться) штук , количество необходимых пакетов выбирает пользователь(исходя из его требований/желаний), может быть и 1 из 7 а может и все 7...
Уделяется старые версии с той целью, чтобы каталог очищался и не было конфликтов после установки новой версии , т.к некоторые файлы просто могут отсутствовать в новой версии, соответственно если перед обновлением не почистить каталог, то они(старые старые файлы, которых теперь в обновление нет) останутся и будут мешать...
Обновление может ставиться в любой каталог и уже потом, в самом ПО указывается путь до базы и сохраняется...

Последний раз редактировалось niksan29, 06-11-2019 в 12:03.


Отправлено: 11:11, 06-11-2019 | #387


Аватара для boss911

Alien


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

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


niksan29

На всякий случай уточню, вам нужно, чтобы при установке очередного обновления (отдельный инсталляционный пакет), путь для установки был аналогичен тому, куда было установлено предыдущее обновление, при этом, каталог назначения должен быть очищен перед установкой нового обновления? Тогда пропишите в скрипте обновления следующие:
Код: Выделить весь код
[InstallDelete]
Name: {app}\Base; Type: filesandordirs
Таким образом, каждое новое обновление можете ставить поверх предыдущего, то есть без предварительной деинсталляции предыдущего, оно сначала удалит в каталоге назначения указанную папку со всем содержимым, только потом начнется установка/распаковка. Например, для установки обновления указан путь "%ProgramFiles%\My Program", тогда оно сначала удалит "%ProgramFiles%\My Program\Base" со всем содержимым, потом начнет устанавливать. Предупреждаю (!), никогда не указывайте для удаления каталог "{app}", так как при не правильных действиях пользователя, может произойти не поправимое, всегда указывайте конкретную конечную папку/файл для удаления, чем уникальней имя, тем лучше.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:24, 06-11-2019 | #388


Аватара для habib2302

Ветеран


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

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


Доброе время суток. Может будет у кого нибудь желание и время переделать скрипт сделанный под IS Ultra под стандартную версию IS v6.x
https://drive.google.com/file/d/1OJG...ew?usp=sharing
Просто хочу перейти на стандартную версию, а чтобы довести до рабочего состояния ума не хватает

-------
Помог? От "Полезное сообщение" не откажусь!!!


Последний раз редактировалось habib2302, 07-11-2019 в 12:39.


Отправлено: 12:32, 07-11-2019 | #389


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

Ветеран


Contributor


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

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


Цитата habib2302:
хочу перейти на стандартную версию, а чтобы довести до рабочего состояния ума не хватает »
habib2302, пробуйте:
Скрытый текст

Код: Выделить весь код
#define AppName "HxD Hex Editor"
#define AppVersion "2.3"

[Setup]
AppName={#AppName}
AppVerName={#AppName} {#AppVersion}
AppId=HxD
AppVersion={#AppVersion}
AppCopyright=Xabib © 2019
AppPublisher=Mael Horz
AppPublisherURL=https://mh-nexus.de/
AppSupportURL=https://mh-nexus.de/hxd/
AppUpdatesURL=https://mh-nexus.de/hxd/
AllowNoIcons=yes
DefaultDirName={code:GetDefaultDirName}\HxD
DefaultGroupName={#AppName}
DisableWelcomePage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
DirExistsWarning=no
PrivilegesRequiredOverridesAllowed=dialog
SetupIconFile=Install.ico
UninstallDisplayIcon={code:GetMainExeFileName}
UninstallDisplayName={#AppName} {#AppVersion}
OutputBaseFilename={#AppName} {#AppVersion} RePack (& Portable) by Xabib
VersionInfoDescription={#AppName} RePack by Xabib
VersionInfoVersion={#AppVersion}
Compression=lzma2/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
LZMADictionarySize=65536
LZMAMatchFinder=BT
LZMANumFastBytes=273
ArchitecturesInstallIn64BitMode=x64
Uninstallable=not IsInPortableMode
WizardSmallImageFile=WizardSmallImage0.bmp

[Languages]
Name: enu; MessagesFile: compiler:default.isl
Name: rus; MessagesFile: compiler:Languages\russian.isl

[Messages]
BeveledLabel=RePack by Xabib
SelectLanguageTitle={#AppName}

[CustomMessages]
enu.CreateConfigShowOptions=Show options window (when finishing install)
enu.CreateDefaultConfig=Create default configuration
enu.ForbiddenDirMessage=In portable mode, %1 should not be installed in "Program Files" or similar system directories.
enu.InstallModePageCaption=Pick Installation Mode
enu.InstallModePageDescription=Do you prefer integration into Windows or a portable installation?
enu.InstallModePageNormalOption=Normal - Integrates into Windows
enu.InstallModePagePortableOption=Portable - Supports removeable drives (e.g., USB pen drives)
enu.InstallModePageSubCaption=Choose a normal installation that integrates into Windows (e.g., Startmenu, optional Explorer context menu), or a portable installation that can run on any compatible Windows machine.
enu.LanguageFilesComponent=Languages
enu.OpenInstallFolderAfterInstall=Open installation target folder
enu.ProgramFilesComponent=Program Files
enu.StatusRunHxDToCreateConfigFile=Create configuration file...
enu.TaskConfigurationFile=Configuration file:
enu.WriteProtectConfig=Make readonly
enu.PortableButtonInstall=&Unpack
rus.CreateConfigShowOptions=Показать окно параметров (после завершения установки)
rus.CreateDefaultConfig=Создать конфигурацию по умолчанию
rus.ForbiddenDirMessage=В портативном режиме %1 не следует устанавливать в «Program Files» или аналогичных системных каталогах.
rus.InstallModePageCaption=Выберите тип установки
rus.InstallModePageDescription=Предпочитаете интеграцию в Windows или портативную версию?
rus.InstallModePageNormalOption=Нормальная - интеграция в Windows
rus.InstallModePagePortableOption=Портативная - поддерживает переносимые устройства (USB/HDD)
rus.InstallModePageSubCaption=Выберите нормальный тип для установки программы в Windows (добавление в меню Пуск, опционально в контекстное меню) или портативную для работы программы на любом ПК, совместимым с Windows
rus.LanguageFilesComponent=Языки
rus.OpenInstallFolderAfterInstall=Открыть папку установки
rus.ProgramFilesComponent=Program Files
rus.StatusRunHxDToCreateConfigFile=Создать файл конфигурации...
rus.TaskConfigurationFile=Файл конфигурации:
rus.WriteProtectConfig=Сделать доступным только для чтения
rus.PortableButtonInstall=&Распаковать

[Files]
Source: {app}\HxD32_enu.exe; DestDir: {app}; DestName: HxD.exe; Languages: enu; Flags: replacesameversion; Check: not IsInPortableMode and not IsWin64
Source: {app}\HxD32_enu.exe; DestDir: {app}; DestName: HxD32.exe; Languages: enu; Flags: replacesameversion; Check: IsInPortableMode
Source: {app}\HxD64_enu.exe; DestDir: {app}; DestName: HxD.exe; Languages: enu; Flags: replacesameversion; Check: not IsInPortableMode and IsWin64
Source: {app}\HxD64_enu.exe; DestDir: {app}; DestName: HxD64.exe; Languages: enu; Flags: replacesameversion; Check: IsInPortableMode and IsWin64
Source: {app}\HxD32_rus.exe; DestDir: {app}; DestName: HxD.exe; Languages: rus; Flags: replacesameversion; Check: not IsInPortableMode and not IsWin64
Source: {app}\HxD32_rus.exe; DestDir: {app}; DestName: HxD32.exe; Languages: rus; Flags: replacesameversion; Check: IsInPortableMode
Source: {app}\HxD64_rus.exe; DestDir: {app}; DestName: HxD.exe; Languages: rus; Flags: replacesameversion; Check: not IsInPortableMode and IsWin64
Source: {app}\HxD64_rus.exe; DestDir: {app}; DestName: HxD64.exe; Languages: rus; Flags: replacesameversion; Check: IsInPortableMode and IsWin64

[Registry]
Root: HKCR32; Subkey: *\shell\HxD; Flags: uninsdeletekey dontcreatekey
Root: HKCR32; Subkey: *\shell\HxDReadonly; Flags: uninsdeletekey dontcreatekey
Root: HKCR64; Subkey: *\shell\HxD; Check: IsWin64; Flags: uninsdeletekey dontcreatekey
Root: HKCR64; Subkey: *\shell\HxDReadonly; Check: IsWin64; Flags: uninsdeletekey dontcreatekey

[Run]
Filename: {code:GetMainExeFileName}; Parameters: {code:GetHxDConfigParams}; StatusMsg: {cm:StatusRunHxDToCreateConfigFile}; Check: IsInPortableMode
Filename: {code:GetMainExeFileName}; Description: {cm:LaunchProgram,{#AppName}}; Flags: postinstall skipifsilent nowait; Check: not IsInPortableMode
Filename: {app}; Description: {cm:OpenInstallFolderAfterInstall}; Flags: shellexec postinstall skipifsilent nowait; Check: IsInPortableMode

[Icons]
Name: {group}\HxD; Filename: {code:GetMainExeFileName}; Check: not IsInPortableMode
Name: {autoappdata}\Microsoft\Internet Explorer\Quick Launch\HxD; Filename: {code:GetMainExeFileName}; Tasks: quicklaunchicon; Check: not IsInPortableMode
Name: {autodesktop}\HxD; Filename: {code:GetMainExeFileName}; Tasks: desktopicon; Check: not IsInPortableMode

[Tasks]
Name: createdefaultconfig; Description: {cm:CreateDefaultConfig}; GroupDescription: {cm:TaskConfigurationFile}; Flags: exclusive; Check: IsInPortableMode
Name: createconfigshowoptions; Description: {cm:CreateConfigShowOptions}; GroupDescription: {cm:TaskConfigurationFile}; Flags: exclusive unchecked; Check: IsInPortableMode
Name: makeconfigreadonly; Description: {cm:WriteProtectConfig}; GroupDescription: {cm:TaskConfigurationFile}; Flags: unchecked; Check: IsInPortableMode
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Check: not IsInPortableMode
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Check: not IsInPortableMode

[Code]
var
  InputOptionPage: TInputOptionWizardPage;

function IsInPortableMode: Boolean;
begin
  Result := InputOptionPage.Values[1];
end;

function GetDefaultDirName(const AParam: string): string;
begin
  if ExpandConstant('{param:portable|0}') = '1' then
    Result := ExpandConstant('{userdesktop}') else
    Result := ExpandConstant('{autopf}');
end;

function GetMainExeFileName(const AParam: string): string;
begin
  if not IsInPortableMode then
    Result := ExpandConstant('{app}\HxD.exe')
  else if not IsWin64 then
    Result := ExpandConstant('{app}\HxD32.exe')
  else
    Result := ExpandConstant('{app}\HxD64.exe');
end;

function GetHxDConfigParams(const AParam: string): string;
begin
  Result := '/chooselang:' + ActiveLanguage;
  if IsTaskSelected('createdefaultconfig') then
  begin
    Result := Result + ' /createdefaultconfig:';
    if IsTaskSelected('makeconfigreadonly') then
      Result := Result + 'readonly' else
      Result := Result + 'normal';
  end else
  if IsTaskSelected('createconfigshowoptions') then
  begin
    Result := Result + ' /createconfig:';
    if IsTaskSelected('makeconfigreadonly') then
      Result := Result + 'readonly' else
      Result := Result + 'normal';
  end;
end;

function IsForbiddenDir(const ADir: string): Boolean;
begin
  Result := IsAdminInstallMode and
    ((not IsWin64 and (Pos(ExpandConstant('{win}'), ADir) = 1)) or
    (not IsWin64 and (Pos(ExpandConstant('{commonpf32}'), ADir) = 1)) or
    (IsWin64 and (Pos(ExpandConstant('{commonpf64}'), ADir) = 1)));
end;

procedure InstallModeListBoxClick(Sender: TObject);
begin
  if IsInPortableMode and (CompareText(WizardDirValue, ExpandConstant('{autopf}\HxD')) = 0) then
    WizardForm.DirEdit.Text := ExpandConstant('{userdesktop}\HxD')
  else if not IsInPortableMode and (CompareText(WizardDirValue, ExpandConstant('{userdesktop}\HxD')) = 0) then
    WizardForm.DirEdit.Text := ExpandConstant('{autopf}\HxD');
end;

procedure CreateInstallModePage;
begin
  InputOptionPage := CreateInputOptionPage(wpWelcome, ExpandConstant('{cm:InstallModePageCaption}'),
    ExpandConstant('{cm:InstallModePageDescription}'), ExpandConstant('{cm:InstallModePageSubCaption}'), True, False);
  InputOptionPage.Add(ExpandConstant('{cm:InstallModePageNormalOption}'));
  InputOptionPage.Add(ExpandConstant('{cm:InstallModePagePortableOption}'));
  InputOptionPage.Values[1] := ExpandConstant('{param:portable|0}') = '1';
  InputOptionPage.Values[0] := not InputOptionPage.Values[1];
  InputOptionPage.CheckListBox.OnClickCheck := @InstallModeListBoxClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectTasks:
      begin
        if not IsInPortableMode then
          WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall) else
          WizardForm.NextButton.Caption := ExpandConstant('{cm:PortableButtonInstall}');
      end;
  end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  case CurPageId of
    wpSelectDir:
      if IsInPortableMode then
      begin
        Result := not IsForbiddenDir(WizardDirValue);
        if not Result then
          MsgBox(ExpandConstant('{cm:ForbiddenDirMessage,{#AppName}}'), mbError, MB_OK);
      end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := False;
  case PageID of
    wpSelectProgramGroup:
      Result := IsInPortableMode;
  end;
end;

procedure InitializeWizard;
begin
  CreateInstallModePage;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:01, 10-11-2019 | #390



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




 
Переход