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

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

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

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

Ветеран


Contributor


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


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

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

 

Аватара для SatHan

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


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

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


Цитата Gnom_aka_Lexander:
нет. перед копированием переключи раскладку клавиатуры на русский. »
теперь понял. Спасибо. как вариант учту, незнал. к Notepad++ просто привык, на нём работать удобнее. R.i.m.s.k.y., так бы сразу и сказал что находясь в компиляторе нужно раскладку клавиатуры переключить. а так эта инфа была для spice, да и не только к нему и к остальным тоже у меня такая пустяшная проблема не произошла б.
Цитата spice:
он у меня есть у меня ultra версия, в редакторе форм все на английском я не понимаю как с ним работать. »
всё равно какая версия хоть ультра хотя макси инно один, а насчёт русского для расширенной версии, та возьми ты со старой версии например 5.4.0 из шапки в соседней теме http://forum.oszone.net/showthread.p...99#post1201499 и всё станет понятно.

Последний раз редактировалось SatHan, 12-10-2012 в 21:30.

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

Отправлено: 16:39, 05-09-2012 | #821



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

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


Аватара для Ivan_009

Ветеран


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

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


Небольшой вопрос а можно вместо 1 шрифта загрузить например 2 своих шрифта в инсталлятор...

Snoopak96, Не работает все равно...

Отправлено: 16:48, 05-09-2012 | #822


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


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

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


Ivan_009,
скинь в лс весь проект.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:22, 05-09-2012 | #823


Старожил


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

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


Привет хотел попросить помощи дописать скрипт что не хватает для проверки места дело в том что у меня после смены языка пропадает данные размер игры и так далее.
вот скрин
вот сам скрипт http://rghost.ru/40204994

Отправлено: 20:12, 05-09-2012 | #824


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


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

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


vint56,
читать дальше »
Код: Выделить весь код
#define NeedSize 4380
#define NeedInstallSize 47890
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: Russian.isl; DestDir: {tmp}
Source: English.isl; DestDir: {tmp}


[_Code]
var
  SettingButton: TButton;
  Flag, SetParameters: Boolean;
  LangFile: String;
  SizePanel: TPanel;

  TotalSpaceLabel, FreeSpaceLabel,InstallSpaceLabel, NeedSpacelabel,
  TotalSpaceLabel2, FreeSpaceLabel2, NeedSpacelabel2, InstallSpaceLabel2: TLabel;
  FreeMB, TotalMB: Cardinal;

function NumToStr(Float: Extended): String;
begin
  Result:= format('%.2n', [Float]); StringChange(Result, ',', '.');
  while ((Result[Length(Result)] = '0')or(Result[Length(Result)] = '.'))and(Pos('.', Result) > 0) do
  SetLength(Result, Length(Result)-1);
end;

function MbOrTb(Float: Extended): String;
begin
  if Float < 1024 then Result:= NumToStr(Float)+' '+GetIniString('Messages', 'mb', '', LangFile) else
  if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+' '+GetIniString('Messages', 'gb', '', LangFile) else
  Result:= NumToStr(Float/(1024*1024))+' '+GetIniString('Messages', 'tb', '', LangFile);
end;

procedure ObjectFunc(Sender: TObject);
var
  Drive: String;
begin
case Sender of
  WizardForm.DirEdit: begin
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  
  TotalSpaceLabel.Caption := GetIniString('Messages', 'TotalMBLabel', '', LangFile)+MbOrTb(TotalMB);
  FreeSpaceLabel.Caption := GetIniString('Messages', 'FreeSpaceLabel', '', LangFile)+MbOrTb(FreeMB);
  InstallSpacelabel.Caption := GetIniString('Messages', 'TotalNeedSpaceLabel', '', LangFile)+MbOrTb({#NeedInstallSize});
  NeedSpaceLabel.Caption := GetIniString('Messages', 'NeedSpaceLabel', '', LangFile)+MbOrTb({#NeedSize});
  WizardForm.NextButton.Enabled:=(FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize});
  //if (FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize}) then FreeSpaceLabel2.Font.Color:=$FFFFFF else FreeSpaceLabel2.Font.Color:=$0000FF;
end;
end;
end;

function InitializeSetup:boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\Russian.isl')) then ExtractTemporaryFile('Russian.isl');
  if not FileExists(ExpandConstant('{tmp}\English.isl')) then ExtractTemporaryFile('English.isl');
  Result:=True;
end;

procedure HideShowOnClick(Sender: TObject);
begin
  if Flag = False then begin
  LangFile:= ExpandConstant('{tmp}\Russian.isl');
  Flag:= True;
  SettingButton.Caption:= 'Ru';
end else begin
  LangFile:= ExpandConstant('{tmp}\English.isl')
  Flag:= False;
  SettingButton.Caption:= 'En';
end;
  WizardForm.NextButton.Caption := GetIniString('Messages', 'ButtonNext', '', LangFile);
  WizardForm.BackButton.Caption := GetIniString('Messages', 'ButtonBack', '', LangFile);
  WizardForm.CancelButton.Caption := GetIniString('Messages', 'ButtonCancel', '', LangFile);
  WizardForm.DirBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);
  WizardForm.GroupBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);
  
  TotalSpaceLabel.Caption := GetIniString('Messages', 'TotalMBLabel', '', LangFile)+MbOrTb(TotalMB);
  FreeSpaceLabel.Caption := GetIniString('Messages', 'FreeSpaceLabel', '', LangFile)+MbOrTb(FreeMB);
  InstallSpacelabel.Caption := GetIniString('Messages', 'TotalNeedSpaceLabel', '', LangFile)+MbOrTb({#NeedInstallSize});
  NeedSpaceLabel.Caption := GetIniString('Messages', 'NeedSpaceLabel', '', LangFile)+MbOrTb({#NeedSize});
end;

procedure InitializeWizard();
begin
  SettingButton:= TButton.Create(WizardForm);
  SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
  SettingButton.Caption:= 'Ru';
  SettingButton.OnClick:= @HideShowOnClick;
  SettingButton.Parent:= WizardForm;
  Flag:=True;

  TotalSpaceLabel:= TLabel.Create(WizardForm);
  with TotalSpaceLabel do begin
  Parent := WizardForm.SelectDirPage;
  AutoSize:=True;
  Transparent := True;
  SetBounds(ScaleX(0), ScaleY(120), ScaleX(0), ScaleY(0));
  Font.Size:= 8;
end;

  FreeSpaceLabel:= TLabel.Create(WizardForm);
  with FreeSpaceLabel do begin
  Parent := WizardForm.SelectDirPage;
  AutoSize:=True;
  Transparent := True;
  SetBounds(ScaleX(0), ScaleY(140), ScaleX(0), ScaleY(0));
  Font.Size:= 8;
end;

  InstallSpacelabel:= TLabel.Create(WizardForm);
  with InstallSpacelabel do begin
  Parent := WizardForm.SelectDirPage;
  AutoSize:=True;
  Transparent := True;
  SetBounds(ScaleX(150), ScaleY(120), ScaleX(0), ScaleY(0));
  Font.Size:= 8;
end;

  NeedSpaceLabel:= TLabel.Create(WizardForm);
  with NeedSpaceLabel do begin
  Parent := WizardForm.SelectDirPage;
  AutoSize:=True;
  Transparent := True;
  SetBounds(ScaleX(150), ScaleY(140), ScaleX(0), ScaleY(0));
  Font.Size:= 8;
end;
  WizardForm.DirEdit.OnChange:=@ObjectFunc;
end;

procedure Showcomp(CurPageID: Integer);
begin
case CurPageID of
  wpSelectDir:
begin
  ObjectFunc(WizardForm.DirEdit);
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  ShowComp(CurPageID);
If Flag then begin
  LangFile:= ExpandConstant('{tmp}\Russian.isl');
end else begin
  LangFile:= ExpandConstant('{tmp}\English.isl')
  WizardForm.NextButton.Caption := GetIniString('Messages', 'ButtonNext', '', LangFile);
  WizardForm.BackButton.Caption := GetIniString('Messages', 'ButtonBack', '', LangFile);
  WizardForm.CancelButton.Caption := GetIniString('Messages', 'ButtonCancel', '', LangFile);
  WizardForm.DirBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);
  WizardForm.GroupBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);
case CurPageID of
  wpWelcome:
begin
end;
  wpFinished:
begin
  SettingButton.Hide;
  WizardForm.NextButton.Caption := GetIniString('Messages', 'ButtonFinish', '', LangFile);
end;
end;
end;
end;
Можно упростить - но мне лень

Последний раз редактировалось Snoopak96, 05-09-2012 в 21:48.

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

Отправлено: 21:25, 05-09-2012 | #825


Аватара для Johny777

Ветеран


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

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


накатайте мне кто-нибудь пожалуйста пример считывания ини файла в массив строк (Array of String) и последующей загрузкой данных ключей из секций, но уже из переменной

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

Последний раз редактировалось Johny777, 06-09-2012 в 10:38.


Отправлено: 10:31, 06-09-2012 | #826


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

Ветеран


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

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


Johny777, а зачем тебе парсить инишник если есть встроенные функции?

Код: Выделить весь код
/// в начале считали, например в InitializeSetup
if FileExists(ExpandConstant('{pf}\MPC-HC\mpc-hc.ini')) then RenderType := StrToInt( GetIniString('Settings', 'DSVidRen', '0', ExpandConstant('{pf}\MPC-HC\mpc-hc.ini')) );
// в конце записали на шаге isDone
if FileExists(ExpandConstant('{pf}\MPC-HC\mpc-hc.ini')) then SetIniString('Settings', 'DSVidRen', IntToStr(RenderType), ExpandConstant('{pf}\MPC-HC\mpc-hc.ini'));
//в промежутке инишник дергать не надо

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

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

Отправлено: 12:35, 06-09-2012 | #827


Аватара для SatHan

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


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

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


подскажите ответ на такой вопрос
имеются три игры которые расположены в C:\Program Files\Games в папках Game_X таких папок три где X цифра.

код#
Код: Выделить весь код
[Setup]
AppName=Extende
AppVersion=1.0
AppVerName=Extende 1.0
DefaultDirName={pf}\Games
DefaultGroupName=Extende
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=ExtSetup
Compression=lzma
SolidCompression=yes

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

[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full

[Files]
Source: Game_1\*; DestDir: {app}\Game_1; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_1
Source: Game_2\*; DestDir: {app}\Game_2; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_2
Source: Game_3\*; DestDir: {app}\Game_3; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_3
каждый компонент на каждую игру.

Что нужно сделать а главное как сделать чтоб если один из ключей в реестре
читать дальше »
Код: Выделить весь код
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1]

не найден то и компонент становился скрытым?

Отправлено: 15:16, 06-09-2012 | #828


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

Ветеран


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

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


SatHan,
Код: Выделить весь код
[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1');
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1');
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full; Check: RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1');
_____________

Johny777, я в таких случая тупо инициализирую в память на начальном шаге все нужные переменные, благо их немного

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

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

Отправлено: 15:20, 06-09-2012 | #829


Аватара для SatHan

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


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

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


R.i.m.s.k.y., не работает, пишет "Directive or parameter "Check" expression error: Can only call Function "ExpandConstant" within parameter lists".

Нашёл для себя вот такой вариант

читать дальше »
Код: Выделить весь код
[Setup]
AppName=Extende
AppVersion=1.0
AppVerName=Extende 1.0
DefaultDirName={pf}\Games
DefaultGroupName=Extende
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=ExtSetup
Compression=lzma
SolidCompression=yes

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

[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: CheckRegGame1
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: CheckRegGame2
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full; Check: CheckRegGame3

[Files]
Source: Game_1\*; DestDir: {app}\Game_1; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_1
Source: Game_2\*; DestDir: {app}\Game_2; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_2
Source: Game_3\*; DestDir: {app}\Game_3; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_3

[Icons]
Name: {group}\{cm:UninstallProgram,Extende}; Filename: {uninstallexe}

[#code]
Function CheckRegGame1: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') then
Result:= True;
end;

Function CheckRegGame2: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') then
Result:= True;
end;

Function CheckRegGame3: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1') then
Result:= True;
end;


только теперь проблема в следующем
когда не одного компонента нет (не найдены ключи в реестре) то инсталятор всё равно запускается. Гуру подскажите как сделать чтоб если не одного компонента нет (не найдены ключи в реестре) то инсталятор не запускался а выдавал сообщение что "на компьютере не найдено установлено игр"?

Отправлено: 16:37, 06-09-2012 | #830



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




 
Переход