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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

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

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Пользователь


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

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


Цитата El Sanchez:
Пример в справке. »
Ну совсем не помогло... я думаю надо что-то писать в секцию [Registry]

Цитата El Sanchez:
На примере предыдущего кода: »
А вот это спасибо, а вот это БОЛЬШОЕ спасибо!

Отправлено: 11:30, 12-10-2013 | #1241



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

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


SHVtYW4=


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

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


Цитата Mat_y:
Существует программа (не моя) и установщик находит к ней путь по AppId . »
Не известно какой установщик используется.
Цитата El Sanchez:
используйте отличный от AppId программы идентификатор для патча. Если AppId у программы это GUID ({...}-вида) »
El Sanchez, Не учитываешь один момент с реестром.
У Inno может быть вида {XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}_is1 или MyProg_is1, а у других {XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}, MyProg или вообще XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Не известно какой установщик используется у Mat_y, тем более как он указывает что не его:
Цитата El Sanchez:
(не моя) »

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 12:54, 12-10-2013 | #1242


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

Ветеран


Contributor


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

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


Цитата Nordek:
Не известно какой установщик используется у Mat_y, тем более как он указывает что не его »
Nordek, понятно, что это Inno, ибо сие...
Цитата Mat_y:
Если воспользоваться Unninst.exe, то все дополненные файлы удаляются как надо, но и по AppId установщик эту программу перестает находить »
...возможно только в одном случае, когда патч имеет с программой одинаковый AppId (причем этот AppId именно Inno-шный, с приставкой _isцифра), при установке перезаписывает ветку регистрации программы, а при удалении благополучно ее сносит. Поэтому повторный запуск патча программу уже не найдет.
Цитата Mat_y:
Ну совсем не помогло... я думаю надо что-то писать в секцию [Registry] »
Mat_y, не можете придумать отличный от AppId программы AppId патча? Тогда ветку регистрации программы из реестра, секцию Setup из скрипта патча и реализацию нахождения AppId программы в студию.

Отправлено: 16:51, 12-10-2013 | #1243


Пользователь


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

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


Всем приветы! Надеюсь на вашу помощь, а дело в следующем: инсталлятор не правильно показывает процентаж распаковки файлов, причем скрипт абсолютно чистый (не модифицированный). Архив всего один который был сжат Freearc'ом ([b]Наилучшее асимметричное (с быстрой распаковкой): -m9x -ld192m -s256m]/b])... Вообщем проценты доходят до 100% но распаковка все еще продолжается секунд 5-ть, в остальных же случаях, игры которые я так же паковал и использовал тот же скрипт распаковывались нормально... Пробовал как ручную расстановку процентных соотношений так и автоматическую с использованием records.inf, результат тот же.. в чем может быть причина?

Отправлено: 18:05, 12-10-2013 | #1244


SHVtYW4=


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

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


Цитата Mat_y:
но и по AppId установщик эту программу перестает находить »
Ну если Inno, в добавок минусом выступает то что стороннего производства, то и подстроиться под него.
Если удаление, то примерно в таком духе

читать дальше »
Код: Выделить весь код
#define AppName "My Program"
#define UnExe "{uninstallexe}"

[Setup]
AppName={#AppName}
AppVerName={#AppName}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}
AppId=TheBestAppIdEverMade

[Code]
var
  DeleteB: TNewButton;
  InstPath, UninsPath: string;
  ResultCode: Integer;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
end;

procedure UninstallButton(Sender: TObject);
begin
  Exec(UninsPath, '', '' , SW_SHOW, ewNoWait, ResultCode);
  SendMessage(WizardForm.CancelButton.Handle, $00F5, 0, 0);
end;


procedure InitializeWizard;
begin
  InstPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|}'));
  UninsPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,UninstallString|}'));
    begin
      DeleteB := TNewButton.Create(WizardForm);
      DeleteB.Name := 'Del_Button';
      DeleteB.Parent := WizardForm;
      DeleteB.Left := ScaleX(163);
      DeleteB.Top := ScaleY(327);
      DeleteB.Width := ScaleX(75);
      DeleteB.Height := ScaleY(23);
      DeleteB.Caption := 'Удалить';
      DeleteB.OnClick := @UninstallButton;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1')
  then
    else
      begin
        DeleteB.Visible := false;
      end;
end;

Отправлено: 21:47, 12-10-2013 | #1245


Пользователь


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

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


AppId программы выглядит так:
Код: Выделить весь код
[Setup]
AppId={{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}
Этот ключ я нашел в реестре для установленной программы в секции HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1

Благодаря этому AppId мой установщик находит правильный путь к установленной программе. Но если я удаляю установленные сверху программы файлы (через Uninstall ), то удаляется и запись о программе в реестре (точнее она остается, но даже не открывается, выдавая ошибку).

Nordek, что делает эта строчка?
Код: Выделить весь код
procedure CurPageChanged(CurPageID: Integer);
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1')
  then
    else
      begin
        DeleteB.Visible := false;
      end;
end;
А конкретно эта:
Код: Выделить весь код
        DeleteB.Visible := false;
Мне просто надо, чтобы деинсталлятор удалял файлы установленные, но реестр просто не трогал.

Отправлено: 11:40, 13-10-2013 | #1246


Пользователь


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

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


[setup]
DefaultDirName="{code:MyConst}"
[code]
function MyConst(Default: String): String;
var
ResultStr: String;
begin
RegQueryStringValue(HKLM, 'Software\...', 'Install Dir', ResultStr);
Result:=ResultStr
end;

Вопрос: Как сделать, чтобы в случае отсутствия ссылки реестра инсталлятор автоматический указывал стандартный путь установки {pf}? Если кто знает помогите пожалуйста.

Отправлено: 13:28, 13-10-2013 | #1247


SHVtYW4=


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

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


Цитата Mat_y:
А конкретно эта: »
Делает кнопку удалить не активной если в системе не установлено приложение.
Цитата Mat_y:
но реестр просто не трогал. »
Тот код выше который я тебе предоставил, он проверяет ветку реестра. А точнее InstallLocation и UninstallString, вот от них и пляши.

Могу предложить такой вариант
Код: Выделить весь код
[Setup]
CreateUninstallRegKey=false
UninstallFilesDir={app}\Uninstall

Код: Выделить весь код
[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{B7EB229F-2DFB-4612-AFC0-99773E1E14A8}_is1; ValueType: string; ValueName: InstallLocation2; ValueData: {app}\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{B7EB229F-2DFB-4612-AFC0-99773E1E14A8}_is1; ValueType: string; ValueName: UninstallString2; ValueData: """{app}\unins000.exe"""; Flags: uninsdeletevalue uninsdeletekeyifempty
т.е это для второго инсталлятора.


Тебе нужно чтоб при удалении не стиралась основная информации о инсталляции.
Значит используем во втором инсталляторе секцию [Registry] для того чтоб второй инсталлятор дописывал для кода информацию о удалении (о себе, что он там установлен).

Секцию "CreateUninstallRegKey=false" используем для того чтоб второй инсталлятор не вписывал о себе информацию и не заменял основную установку собой, для этого у второго есть секция [Registry] от куда дополняется информацией для кода InstallLocation2 и UninstallString2-ом.

"UninstallFilesDir={app}\Uninstall" служит для деинсталлятора, создаёт деинсталлятор в папке Uninstall

Таким образом, второй инсталлятор не трогает реестр т.е только дополняет. А при деинсталляции созданные им секции удаляет не затрагивая основную информацию первого.
А код, выполняет поиск. Существует ли второй компонент в системе или нет. (если что, в коде сам заменишь InstallLocation и UninstallString на InstallLocation 2 и UninstallString 2).

Вот примеры

Код: Выделить весь код
[Setup]
AppId={{B7EB229F-2DFB-4612-AFC0-99773E1E14A8}
AppName=Основная программа
AppVersion=1.5
;AppVerName=Основная программа 1.5
DefaultDirName={pf}\Программа
DefaultGroupName=Программа
OutputBaseFilename=setup1
OutputDir=.

[Icons]
Name: {group}\{cm:UninstallProgram,My Program 1}; Filename: {uninstallexe}

Код: Выделить весь код
[Setup]
AppId={{B7EB229F-2DFB-4612-AFC0-99773E1E14A8}
AppName=Компоненты к программе
AppVersion=1.5
;AppVerName=Компоненты к программе 1.5
DefaultDirName={pf}\Программа
DefaultGroupName=Программа
OutputBaseFilename=setup1
OutputDir=.
CreateUninstallRegKey=false
UninstallFilesDir={app}\Uninstall

[Icons]
Name: {group}\{cm:UninstallProgram,My Program 2}; Filename: {uninstallexe}

[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{B7EB229F-2DFB-4612-AFC0-99773E1E14A8}_is1; ValueType: string; ValueName: InstallLocation2; ValueData: {app}\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{B7EB229F-2DFB-4612-AFC0-99773E1E14A8}_is1; ValueType: string; ValueName: UninstallString2; ValueData: """{app}\unins000.exe"""; Flags: uninsdeletevalue uninsdeletekeyifempty


Надеюсь понял мою идею.

Последний раз редактировалось Nordek, 13-10-2013 в 14:10.

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

Отправлено: 13:38, 13-10-2013 | #1248


Аватара для nik1967

Старожил


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

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


Raz3r,
пример
Код: Выделить весь код
[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={code:MyConst}

[_code]
function MyConst(Default: String): String;
var
ResultStr: String;
begin
  if RegQueryStringValue(HKLM, 'Software\...', 'Install Dir', ResultStr) then
    Result:= ResultStr
  else
    Result:= ExpandConstant('{pf}');
end;

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

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

Отправлено: 13:46, 13-10-2013 | #1249


SHVtYW4=


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

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


Цитата Raz3r:
Как сделать, чтобы в случае отсутствия ссылки реестра инсталлятор автоматический указывал стандартный путь установки »
Вот немного другой

пример 2

Код: Выделить весь код
#define AppID "{B7EB229F-2DFB-4612-AFC0-99773E1E14A8}"

[Setup]
AppId={{#AppID}
AppName=My Program
AppVersion=1.5
;AppVerName=My Program 1.5
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("#AppID")}_is1,InstallLocation|{pf}\My Program}
DefaultGroupName=My Program
OutputDir=.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 14:01, 13-10-2013 | #1250



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход