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

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

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

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

Ветеран


Contributor


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


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

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

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

Ветеран


Contributor


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

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


Цитата Volonter908:
ищу скрипт для выбора имени пользователя и шары в установщике DC++(Речь идёт о файле DCPlusPlus.xml) »
Volonter908, дабы не тратить время на создание нод xml-файла через код, создайте шаблон файла DCPlusPlus.xml в кодировке UTF-8:
читать дальше »

HTML код: Выделить весь код
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <DCPlusPlus> <Settings> <Nick></Nick> </Settings> <Share> <Directory Virtual=""></Directory> </Share> </DCPlusPlus>



Тогда скрипт будет выглядеть вот так:
читать дальше »

Код: Выделить весь код
[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[CustomMessages]
ru.NickNamePageCaption=Информация о пользователе
ru.NickNamePageDescription=Какой ник у Вас в DC++?
ru.NickNamePageSubcaption=Укажите ник и нажмите "Далее"
ru.NickNamePageEditName=Имя пользователя в DC++:
ru.ShareDirPageCaption=Выбор каталога для общего доступа
ru.ShareDirPageDescription=Где будут храниться файлы для общего доступа?
ru.ShareDirPageSubcaption=Укажите каталог для файлов общего доступа

[Files]
;допустим, что шаблон рядом со скриптом находится
Source: DCPlusPlus.xml; DestDir: {app}; Flags: ignoreversion

[code]
var
    NickNamePage: TInputQueryWizardPage;
    ShareDirPage: TInputDirWizardPage;

//создание xml-файла    
procedure CreateDCPlusPlus(Filename: String);
var
    objXMLDoc: Variant;
begin
    try
        objXMLDoc := CreateOleObject('Microsoft.XMLDOM');
        objXMLDoc.load(Filename);
        //nick node
        objXMLDoc.selectSingleNode('//DCPlusPlus/Settings/Nick').text := NickNamePage.Values[0];
        //share node
        objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').setAttribute('Virtual', ExtractFileName(RemoveBackSlash(ShareDirPage.Values[0])));
        objXMLDoc.selectSingleNode('//DCPlusPlus/Share/Directory').text := ShareDirPage.Values[0];
        //save xml
        objXMLDoc.save(Filename);
    except
        //ShowExceptionMessage;
        Exit;
    end;
end;

//чтение значений из xml-файла при повторной установке
function ReadDCPlusPlus(Filename, Node, Default: String): String;
var
    objXMLDoc: Variant;
begin
    Result := Default;
    if not FileExists(Filename) then Exit;
    try
        objXMLDoc := CreateOleObject('Microsoft.XMLDOM');
        objXMLDoc.load(Filename);
        objXMLDoc.async := False;
        if objXMLDoc.parseError.errorCode <> 0 then Exit;
        Result := objXMLDoc.selectSingleNode(Node).text;
    except
        //ShowExceptionMessage;
        Exit;
    end;
end;

procedure CreateNickNamePage;
begin
    NickNamePage := CreateInputQueryPage(wpSelectTasks, ExpandConstant('{cm:NickNamePageCaption}'), ExpandConstant('{cm:NickNamePageDescription}'), ExpandConstant('{cm:NickNamePageSubcaption}'));
    NickNamePage.Add(ExpandConstant('{cm:NickNamePageEditName}'), False);
    NickNamePage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\DCPlusPlus.xml', '//DCPlusPlus/Settings/Nick', ExpandConstant('{username}'));
end;

procedure CreateShareDirPage;
begin
    ShareDirPage := CreateInputDirPage(NickNamePage.ID, ExpandConstant('{cm:ShareDirPageCaption}'), ExpandConstant('{cm:ShareDirPageDescription}'), ExpandConstant('{cm:ShareDirPageSubcaption}'), False, 'Новая папка');
    ShareDirPage.Add('');
    ShareDirPage.Values[0] := ReadDCPlusPlus(WizardDirValue + '\DCPlusPlus.xml', '//DCPlusPlus/Share/Directory', '');
end;


procedure InitializeWizard();
begin
    CreateNickNamePage;
    CreateShareDirPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    case CurStep of
        ssPostInstall: CreateDCPlusPlus(ExpandConstant('{app}\DCPlusPlus.xml'));
    end;
end;

Отправлено: 11:11, 23-10-2012 | #1171



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

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


Аватара для R.i.m.s.k.y.

Ветеран


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

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


El Sanchez, спасибо, последний вопрос: в коде через exec как правильно вносить 32-х и 64-х битные ключи реестра в 64-й ОС?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 11:33, 23-10-2012 | #1172


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

Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
в коде через exec как правильно вносить 32-х и 64-х битные ключи реестра в 64-й ОС? »
R.i.m.s.k.y.,
Код: Выделить весь код
var
  OldState: Boolean;
  ResultCode: Integer;
begin
  if IsWin64 then
  begin
    OldState := EnableFsRedirection(False);
    try
      //через regedit.exe...
      Exec(ExpandConstant('{win}\regedit.exe'), ExpandConstant('/S "{src}\test.reg"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
      //...или reg.exe
      Exec(ExpandConstant('{sys}\reg.exe'), ExpandConstant('import "{src}\test.reg"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
    finally
      EnableFsRedirection(OldState);
    end;
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:55, 23-10-2012 | #1173


Аватара для R.i.m.s.k.y.

Ветеран


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

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


El Sanchez,
я окончательно запутался
а) для какого режима установщика (32/64) два вышеприведенных примера?
б) последний пример занесет файл реестра в 32-х или в 64-х разрядную секцию реестра?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 13:18, 23-10-2012 | #1174


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

Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
а) для какого режима установщика (32/64) два вышеприведенных примера? »
R.i.m.s.k.y., для режима по умолчанию. 64-режим нужен, если делаешь установщик 64-битной программы.
Цитата R.i.m.s.k.y.:
б) последний пример занесет файл реестра в 32-х или в 64-х разрядную секцию реестра? »
R.i.m.s.k.y., смотря что в reg-файле написано: HKEY_LOCAL_MACHINE\SOFTWARE\123 - пойдет в 64-разрядный куст, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\321 - 32-разрядный

Отправлено: 14:36, 23-10-2012 | #1175


Аватара для R.i.m.s.k.y.

Ветеран


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

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


El Sanchez, я окончательно перестал понимать
Можно тебя об одолжении рассортировать все написанное по моим вопросам для ArchitecturesInstallIn64BitMode=x64 и ArchitecturesInstallIn64BitMode=(blank)

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 14:54, 23-10-2012 | #1176


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

Ветеран


Contributor


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

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


R.i.m.s.k.y., ну тогда слушай теорию, повторять не буду. 64-битная система помимо нативных (родных, своих в доску, etc) 64-битных файлов имеет набор 32-битных файлов для поддержки запуска 32-битных программ через подсистему WOW64, не позволяющей обращаться 32-битному коду к 64-битным файлам и реестру. Грубо говоря, 64-битные программы работают с родными файлами из С:\Windows\system32 и родным реестром (напр. куст HKLM\SOFTWARE), а 32-битные со своим 32-битным набором из С:\Windows\SysWoW64 и своим 32-битным реестром в составе 64-битного (напр. куст HKLM\SOFTWARE\Wow6432Node). Программные группы тоже различаются: Program Files для 64-битных программ, Program Files (x86) для 32-битных. Inno, как и любое другое 32-битное приложение, при обращении к С:\Windows\system32 или к HKLM\SOFTWARE\MyProgram будет перенаправлено подсистемой WOW64 в соответстующие папку SysWoW64 и куст Wow6432Node, {sys} становится С:\Windows\SysWoW64, {pf} - C:\Program Files (x86), HKLM\SOFTWARE - HKLM\SOFTWARE\Wow6432Node и т.д. Если же установщик помимо 32-битных компонентов содержит 64-битные, то нужно позаботиться о том, чтобы неродные для 32-битной программы 64-битные файлы не попали куда не надо (флаг 64bit (для секций Files, Run и UninstallRun), функции IsWin64, EnableFsRedirection и т.д., префикс 64 для параметра Root секции Registry и т.д.).
Код: Выделить весь код
[Run]
;64-bit mode OFF
Filename: {sys}\calc.exe; WorkingDir: {sys} - запустит калькулятор из С:\Windows\SysWoW64
Filename: {sys}\calc.exe; WorkingDir: {sys}; Flags: 64bit - запустит калькулятор из С:\Windows\system32

[Registry]
;64-bit mode OFF
Root: HKLM; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey - запись в HKLM\SOFTWARE\Wow6432Node\MyProgram
Root: HKLM64; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey -  запись в HKLM\SOFTWARE\MyProgram
Теперь о директиве ArchitecturesInstallIn64BitMode. Установка ее значения в x64 и/или ia64 позволяет подсистеме WOW64 выполнять 32-битный код в 64-битном режиме путем переключения собственного режима процессора. Другими словами установщик не становится 64-битным приложением, это невозможно, просто теперь редирект не нужен, дефолтными стают теперь 64-битные папки и кусты, отпадает необходимость в указании флага 64bit или префикса 64, но появляется необходимость использования при обращении к 32-битным папкам и реестру флага 32bit, спецконстант типа {syswow64}, {pf32} и т.д., префикса 32. Поэтому включение режима целесообразно, если устанавливаемые компоненты сплошь 64-битные или их больше, чем 32-битных - меньше писанины. Т.к. 32-битных программ гораздо больше, чем "чистых" 64-битных, то на практике включение режима 64-bit mode встретишь нечасто. Лично я ни разу не применял.
Код: Выделить весь код
[Run]
;64-bit mode ON
Filename: {sys}\calc.exe; WorkingDir: {sys} - запустит калькулятор из С:\Windows\system32
Filename: {sys}\calc.exe; WorkingDir: {sys}; Flags: 32bit - запустит калькулятор из С:\Windows\SysWoW64
Filename: {syswow64}\calc.exe; WorkingDir: {syswow64} - запустит калькулятор из С:\Windows\SysWoW64, не рекомендуется

[Registry]
;64-bit mode ON
Root: HKLM; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey - запись в HKLM\SOFTWARE\MyProgram
Root: HKLM32; Subkey: SOFTWARE\MyProgram; Flags: uninsdeletekey -  запись в HKLM\SOFTWARE\Wow6432Node\MyProgram
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 23-10-2012 | #1177


Аватара для R.i.m.s.k.y.

Ветеран


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

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


El Sanchez, благодарю,
Твой пост будет очень полезен и другим, помести ссылку на него в шапку.

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 18:36, 23-10-2012 | #1178


Аватара для Johny777

Ветеран


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

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


добрые люди!
скажите пожалуйста
можно ли импортировать функции 7z.dll (лежит в папке архиватора) в Inno для распаковки (по возможности и запаковки) внешних архивов с отображением прогрессбара
если да то можно мне пожалуйста код?
кажись там даже можно юзать ком строку параметров (пропускать, перезаписывать ...)

просьба не предлагать мне IsDone

Отправлено: 01:16, 24-10-2012 | #1179


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


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

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


Цитата Johny777:
можно ли импортировать функции 7z.dll (лежит в папке архиватора) в Inno для распаковки (по возможности и запаковки) внешних архивов с отображением прогрессбара »
7.z-архивы (с отображением прогрессбара) можно распаковать через модуль распаковки FreeArc-архивов.
Есть ещё модуль для распаковки 7-zip архивов (с отображением прогрессбара).
Также где-то видел скрипт для запаковки в 7-zip архивы...
Вот тут посмотри (первое и второе там точно есть).
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:04, 24-10-2012 | #1180



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход