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

Ответить
 • Просмотры: 21
Аватара пользователя
habib2302

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

Сообщение habib2302 »

Доброе время суток. Проблема в том, что после запуска инсталлятора для распаковки в {tmp} большого объема (8 гб), то инсталлятор долго грузится. можно ли как нибудь это исправить?
Аватара пользователя
Dodakaedr

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

Сообщение Dodakaedr »

Доброе время суток.



Опять столкнулся с трудностью:



Имеется программа, к ней прилагается библиотека для интеграции в оболочку проводника, библиотека находится в отдельной подпапке в которой расположен файл конфигурации, указывающий путь к самой программе. Файл называется config.lua и содержит запись:



--This file uses UTF8 encuding without BOM-- Path to Program = "\"C:\\Program Files\\My prog\\prog.exe\""



программу я включил в сборник и по пути "\"C:\\Program Files программа соответственно находиться не будет.



С помощью секции ini такие записи у меня не получаются.



Можно ли каким-то образом с пошью Инно внести изменения в этот файл или создать пустой и уже потом вписать в него строку с расположением пути к программе --This file uses UTF8 encuding without BOM-- Path to Program = "\"{app}\\My prog\\prog.exe\""



Причём именно в одну строку, начиная с --This file uses UTF8 encuding without BOM-- иначе (без этой записи или если запись первой строкой, а "Path to Program =" уже на следующей строке) в проводнике интеграция не отображается [пробовал редактировать в ручную]



Можно ли это реализовать в секции Code и если можно, то чтобы работало только тогда, когда выбран к примеру Components: component_1 ?



Заранее Спасибо.
Аватара пользователя
habib2302

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

Сообщение habib2302 »

palsn2000,



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: config.ini; DestDir: {app}; Flags: ignoreversion;
[Types]
Name: full; Description: Полная установка; Flags: iscustom;
[Components]
Name: Comp1; Description: "Запись в config.lua"; Flags: checkablealone; Types: Full;
[code_]
var
  s: string;
function DoubleSlash(S: String): String;
var i: Integer;
begin
Result:='';
  while Length(S)>0 do begin
    i:=Pos('\', S);
    if i>0 then begin
      Result:= Result+Copy(S, 1, i-1)+'\\';
      Delete(S, 1, i);
    end else begin
      Result:= Result+S;
      SetLength(S, 0);
    end;;
  end;
end;
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TStringList;
  i : Integer;
begin
if FileExists(FilePath) then begin
  S:=tstringlist.create;
  S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
  S.Delete(i);
  S.Insert(i,find+'='+replace);
end;
end;
  S.SaveToFile(FilePath);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if WizardForm.ComponentsList.Checked[0] then
begin
  s:=  '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\""';
  RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
end;
end;
end;







Config.ini



Код:

Код: Выделить всё

-This file uses UTF8 encuding without BOM--
Path to Program=

config.ini должен быть такого содержания. Как должно быть прописано сам подредактируешь и замену

RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
Аватара пользователя
Dodakaedr

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

Сообщение Dodakaedr »

Код: Выделить всё

[Files]

Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

Source: Button.bmp; Flags: dontcopy




 
 Код: [url=#][/url]
 [code]procedure logoOnClick(Sender: TObject);
begin
  MsgBox('RePacked by Evilboy', mbInformation, mb_Ok);
end;
procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('Button.bmp')
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20
    Top:=325
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
  end
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end
end;

Ошибка выскакивает на этом BtnImage:=TBitmapImage.Create(WizardForm). Подскажите как исправить
Аватара пользователя
sergey3695

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

Сообщение sergey3695 »

habib2302, интересно как должны отвечать тебе без скрипта. 8 гб - что же там?
Аватара пользователя
habib2302

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

Сообщение habib2302 »

sergey3695, то я запаковываю Adobe Master Collection для лучшего сжатия в запакованном он весит 7.62 а без запаковки 11.5



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!
#define MyAppName "Adobe Creative Suite 6 Master Collection"
#define MyAppVersion "7.0.0.324"
#include "WinTB.iss"
#include "botva2.iss"
[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
DefaultDirName={tmp}\{#MyAppName}
OutputBaseFilename=Adobe Creative Suite 6 Master Collection
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=false
InternalCompressLevel=Ultra64
DiskSpanning=true
DiskSliceSize=1572864000
ShowLanguageDialog=yes
SlicesPerDisk=1
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2015
VersionInfoCopyright=Xabib © 2015
DisableFinishedPage=true
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
DisableProgramGroupPage=yes
InfoBeforeFile=Info.rtf
DisableDirPage=yes
Uninstallable=false
CreateAppDir=true
ReserveBytes=0
[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"
[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: "{app}"; Flags: ignoreversion;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
[Run]
Filename: {win}\explorer.exe; Parameters: {app}\Crack; Flags: NoWait; 
Filename: {app}\Crack\Activation_Keygen.exe; Flags: NoWait;
Filename: {sys}\notepad.exe; Parameters: {app}\Crack\readme.txt; Flags: NoWait;
Filename: {app}\Crack\Check_Disable.cmd; Flags: NoWait;
Filename: {app}\Adobe CS6\Set-up.exe;
[Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif
const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA             = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;
var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;
///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;
procedure RedesignWizardForm;
begin
  with WizardForm.ProgressGauge do
  begin
    Style := npbstMarquee;
  end;
end;
procedure InitializeWizard;
begin
  RedesignWizardForm;
  with WizardForm do
  begin
///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);
      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);
      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////
///////////////////////////////////Логотип
      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;
///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////
    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;
Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
 end;
end;
procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;
Аватара пользователя
Habetdin

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

Сообщение Habetdin »

habib2302, бедный установщик распаковывает всю папку {app}, чтобы добраться до WinTB.dll, используемого в секции кода.

Нужно переместить файл в начало архива + разделить его от solid-части:



Код:

Код: Выделить всё

[Files]
Source: WinTB.dll; Flags: ignoreversion dontcopy noencryption nocompression solidbreak;
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion;
Аватара пользователя
palsn2000

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

Сообщение palsn2000 »

Здравствуйте, всех с Новым Годом! Здоровья, счастья и удачи.

__________________________



Столкнулся со следующей проблемой.

Делаю для себя набор программ - мелкие утилиты, ридеры, и прочее - в общем целая куча полезного разнообразия (чтобы при переустановке системы не тратить часы на поиск, установку и настройку). Часть программ 32-битные, другие 64/32-битные поэтому инсталлятор у меня работает в 32-битном режиме (как в Инно по умолчанию).



Проблема собственно заключается в том, что при установке на Windows 64 Inno setup отправляет записи в реестре в подпапку Wow6432Node и в связи с этим 64-битные программы работают некорректно.



Вот на примере программы Unlocker:

Строка реестра, отвечающая за язык программы (в моем случае русский):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Unlocker]

"Language"="1049"

(вот такая причуда разработчиков, что файл конфигурации языка считывается из информации для удаления) но речь в общем то не об этом.



В Инно я пишу такую строку:

Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Unlocker; ValueType: string; ValueName: Language; ValueData: 1049; Flags: uninsdeletevalue uninsdeletekey



На выходе (в смысле в реестре ОС после инсталляции) имею:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Unlocker]

"Language"="1049"



В итоге Unlocker на английском языке (64-битный Unlocker)



Можно ли как нибудь заставить Inno не добавлять Wow6432Node в эту запись в реестре?
Аватара пользователя
saurn

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

Сообщение saurn »

StongCool, Через CustomMessages


Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: Button.bmp; Flags: dontcopy
[CustomMessages]
Repack=- Repack asfafsasf%n- добавлено бла бла бла%n- вырезано бла бла
[code]
procedure logoOnClick(Sender: TObject);
begin
  MsgBox(CustomMessage('Repack'), mbInformation, mb_Ok);
end;
procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('Button.bmp')
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20
    Top:=325
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
  end;
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end;
end;










Цитата palsn2000:



Причём именно в одну строку, начиная с
Скрипты Inno Setup. Помощь и советы [часть 7]




Благодаря коду sergey3695. Пробуйте...
Ответить

Вернуться в «Автоматическая установка приложений»