Имя пользователя:
Пароль:
 | Правила  

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

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

Аватара для 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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 11:48, 10-03-2014

 

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


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

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


Dodakaedr, вы как-то не слишком конкретно вопросы задаете Т е менять статусы надо во время стандартной установки, используя не стандартный статус-лэйбл? Ну можно попробовать так например
читать дальше »
Код: Выделить весь код
[Files]
Source: "myapp.exe"; DestDir: {app}; BeforeInstall: ChangeLabel('files')

[Registry]
Root: "HKLM"; Subkey:"Software\MyApp"; ValueType: string; ValueName: "path"; ValueData: "{app}"; BeforeInstall: ChangeLabel('reg')

[Сode]
var StatusLbl: TLabel; //новый статус-лэйбл 

procedure ChangeLabel(param:string);
begin 
 case param of 
 'files': StatusLbl.Caption:='Копирование файлов';
 'reg': StatusLbl.Caption:='Создание записи в реестре';
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:14, 17-04-2014 | #451



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

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


Аватара для Dodakaedr

Ветеран


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

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


Цитата Shkutu:
вы как-то не слишком конкретно вопросы задаете »
Ну так я изначально так и спросил http://forum.oszone.net/post-2339390-446.html. Вариант хорош, сейчас попробую... отпишусь

Shkutu, а на иконки (секция [Icon]) можно такое сделать?

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


Последний раз редактировалось Dodakaedr, 17-04-2014 в 15:28.


Отправлено: 15:22, 17-04-2014 | #452


Аватара для Dodakaedr

Ветеран


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

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


Можно эту процедуру оформить как функция, потому что мой статус-лэйбл уже используется в процедуре? По позже вырежу сам код покажу....Не могу ничего придумать(( В оригинале намного больше файлов...
Часть кода отвечающий за статус-лэйбл:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
DisableFinishedPage=yes
[Files]
Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: {app};
[...code]
var
  Portable,Installer: TNewRadioButton;
function InstallerCheck: Boolean;
begin
  Result := Installer.Checked;
end;

function PortableCheck: Boolean;
begin
  Result := Portable.Checked;
end;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MiniInstall;
var
   NewStatusLabel: TLabel;
    begin
with WizardForm do
    begin
    Bevel.Hide;
    Bevel1.Hide;
    MainPanel.Hide;
    AutoScroll := False;
    ClientHeight := ScaleY(85);
    ClientWidth := ScaleX (320);
    InnerNotebook.Align := alClient;
    ProgressGauge.Left := ScaleX(10);
    CancelButton.Left := ScaleX(235);
    CancelButton.Top := ScaleY(65);
    CancelButton.Height := ScaleX(17);
    CancelButton.BringToFront;
    Left:=GetSystemMetrics(16)-Width;
    Top:=GetSystemMetrics(17)-Height;
    FilenameLabel.Hide;
    StatusLabel.Hide;

    NewStatusLabel := TLabel.Create(WizardForm);
with NewStatusLabel do
    begin
      Parent := StatusLabel.Parent;
      SetBounds(90, StatusLabel.Top, StatusLabel.Width, StatusLabel.Height);

    if Installer.Checked then
   Caption:='Установка файлов...';

    if Portable.Checked then
    Caption:='Распаковка файлов...';
      end;
   end;
end;

procedure InitializeWizard();
begin
Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(314);
    Top := ScaleY(266);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Портативная';
    end;

  Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(200);
    Top := ScaleY(266);
    Width := ScaleX(100);
    Height := ScaleY(17);
    Caption := 'Стационарная';
    Checked:=True;
  end;
  end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpInstalling:
begin
MiniInstall;
end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Приятного использования!', mbInformation, MB_OK);
end;

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


Последний раз редактировалось Dodakaedr, 17-04-2014 в 16:03.


Отправлено: 15:53, 17-04-2014 | #453


Аватара для Dodakaedr

Ветеран


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

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


Shkutu, Удалил свой статус-лэйбл, подставил ваш, но не знаю теперь как его вывести в процедуре MiniInstall? Если не выводить, то выбивает ошибку...Как это сделать?

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


Отправлено: 20:43, 17-04-2014 | #454


Аватара для Stealthmax

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


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

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


Цитата Nordek:
Проверял, запускает удаление »
Не вопрос, по порядку. AppID я указываю, само собой это упрощает все действия. Но в данном примере, как я разобрался, две неточности, а именно:
Код: Выделить весь код
function UninstallMyApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then // если убираем эти аргументы, то диалог появляется, т.е. получается что изначально отрицаем существование ключа в реестре, а ОН ЕСТЬ))))
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
И теперь самое интересное, о чем я выше писал, но наверно никто не понял что же не так происходит с извлекаемой строкой реестра.
А происходит следующее: указываем RemoveQuotes, т.е. убираем кавычки, а строка в реестре выглядит так: "C:\Windows\Installer\SandboxieInstall64.exe" /remove, то в итоге при выполнении получаем такой вид: C:\Windows\Installer\SandboxieInstall64.exe" /, т.е. обрезает начало и конец, и получаем явную ошибку. Пробовал играться с добавлением недостающих символов в строке, но результат снова 0.
P.S. Все, решил вопрос снимается.
Код: Выделить весь код
Exec(ExpandConstant('{cmd}'), '/C ' + (Buff),'', SW_HIDE, ewWaitUntilTerminated, i);
Извлекаем параметр в интерпретатор командной строки, и получаем требуемый результат. Другого способа не нашел.

Последний раз редактировалось Stealthmax, 17-04-2014 в 21:53.


Отправлено: 21:12, 17-04-2014 | #455


Аватара для diman_21Ru

Старожил


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

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


Какой самый простой способ в установщик добавить другую мышку ,заранее спасибо.

Отправлено: 21:24, 17-04-2014 | #456


Ветеран


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

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


Цитата Stealthmax:
Но в данном примере, как я разобрался, две неточности »
В данном коде неточностей нет.
---------------------------------------------------

Касательно вашего вопроса, самое просто - использовать StringChange, а после вызывать исполняемый файл через Exec с параметром /remove
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
AppId={{D61E0604-FA55-4DFD-8ED3-CAF85483713A}
DefaultDirName={pf}\My Program
OutputDir=...


[Code]
function InitializeSetup(): Boolean;
var
    Buff: String;
begin
    Buff := '"C:\Windows\Installer\SandboxieInstall64.exe" /remove';
    StringChange(Buff, ' /remove', '');
    MsgBox(RemoveQuotes(Buff), mbError, MB_YESNO);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:53, 17-04-2014 | #457


Аватара для Stealthmax

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


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

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


Цитата saurn:
В данном коде неточностей нет. »
Ну как же нет неточностей, если диалог деинсталляции не появляется?! Идет проверка ключа и вызов удаления, если таковое условие соблюдается, верно? Если так, то я реально не понял как он так работает в первоначальном виде. Установщик родной Sandboxie отнюдь не Inno, а NSIS. А изменять строку- это усложнение процесса, на мой взгляд. Командная строка энергичнее справляется.
Код: Выделить весь код
Exec(ExpandConstant('{cmd}'), '/C ' + GetPath+ ' /S','', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Добавляю только параметр /S и ноу проблем-с, тихое удаление. Но за отклик, все равно спасибо, буду иметь виду такой вариант.

Отправлено: 23:19, 17-04-2014 | #458


Ветеран


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

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


Цитата Stealthmax:
Ну как же нет неточностей, если диалог деинсталляции не появляется?! »
С представленным вами ключем реестра и не будет появлятся, так как инсталятор получает некорректный путь к файлу, а следовательно решает, что файла нет.
В своем первоначальном виде код работает как и надо.

Цитата Stealthmax:
не понял как он так работает в первоначальном виде »
Result := Возвращает Да, если искомой ветки реестра нет. Если условие возвращает Да работа функции прерывается. Если Нет - переходит ко второму условию
if not Result then Result := Возвращает Да, если нет искомого файла. Обрабатывается только если первое условие вернет Нет. Если условие возвращает Да работа функции прерывается.
if not Result then if Отображает MsgBox, если условие выше возвращает Нет.
Получаем своеобразную иерархию условий - если запись в реестре существует, ищем файл, если находим, выводим сообщение с предложением удалить и при ответе Да вызываем деинсталятор.

Отправлено: 23:39, 17-04-2014 | #459


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


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

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


Dodakaedr, надо было не удалять свой лейбл и менять его на мой, а немного подумать, вообще говоря.
читать дальше »

Возвращаете свой лейбл обратно, но при этом делаете его глобальной переменной, чтобы можно было использовать не только в вашей процедуре MiniInstall (инициализацию лейбла, т е create, присвоение parent и setbounds, лучше тоже вынести из процедуры MiniInstall в процедуру InitializeWizard). А в моем примере заменяете мой лейбл на ваш.
Насчет Icons - по идее на иконки тоже можно такое повесить. Подробнее смотрите справку о параметре BerforeInstall.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:50, 18-04-2014 | #460



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

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

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




 
Переход