Скрипты Inno Setup. Помощь и советы [часть 7]
-
habib2302
Re: Скрипты Inno Setup. Помощь и советы [часть 7]
Доброе время суток. Проблема в том, что после запуска инсталлятора для распаковки в {tmp} большого объема (8 гб), то инсталлятор долго грузится. можно ли как нибудь это исправить?
-
Dodakaedr
Re: Скрипты Inno Setup. Помощь и советы [часть 7]
Доброе время суток.
Опять столкнулся с трудностью:
Имеется программа, к ней прилагается библиотека для интеграции в оболочку проводника, библиотека находится в отдельной подпапке в которой расположен файл конфигурации, указывающий путь к самой программе. Файл называется 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 ?
Заранее Спасибо.
Опять столкнулся с трудностью:
Имеется программа, к ней прилагается библиотека для интеграции в оболочку проводника, библиотека находится в отдельной подпапке в которой расположен файл конфигурации, указывающий путь к самой программе. Файл называется 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]
palsn2000,
Скрытый текст
[spoiler]Код: [/spoiler]
Config.ini
Код:
config.ini должен быть такого содержания. Как должно быть прописано сам подредактируешь и замену
RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
Скрытый текст
[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]
Код: Выделить всё
[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). Подскажите как исправить
-
habib2302
-
sergey3695
Re: Скрипты Inno Setup. Помощь и советы [часть 7]
habib2302, интересно как должны отвечать тебе без скрипта. 8 гб - что же там?
-
habib2302
Re: Скрипты Inno Setup. Помощь и советы [часть 7]
sergey3695, то я запаковываю Adobe Master Collection для лучшего сжатия в запакованном он весит 7.62 а без запаковки 11.5
Скрытый текст
[spoiler]Код: [/spoiler]
Скрытый текст
[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]
habib2302, бедный установщик распаковывает всю папку {app}, чтобы добраться до WinTB.dll, используемого в секции кода.
Нужно переместить файл в начало архива + разделить его от solid-части:
Код:
Нужно переместить файл в начало архива + разделить его от 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]
Здравствуйте, всех с Новым Годом! Здоровья, счастья и удачи.
__________________________
Столкнулся со следующей проблемой.
Делаю для себя набор программ - мелкие утилиты, ридеры, и прочее - в общем целая куча полезного разнообразия (чтобы при переустановке системы не тратить часы на поиск, установку и настройку). Часть программ 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 в эту запись в реестре?
__________________________
Столкнулся со следующей проблемой.
Делаю для себя набор программ - мелкие утилиты, ридеры, и прочее - в общем целая куча полезного разнообразия (чтобы при переустановке системы не тратить часы на поиск, установку и настройку). Часть программ 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]
StongCool, Через CustomMessages
Скрытый текст
[spoiler]Код: [/spoiler]
Цитата palsn2000:
Причём именно в одну строку, начиная с
Благодаря коду sergey3695. Пробуйте...
Скрытый текст
[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. Пробуйте...