Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
R.i.m.s.k.y.
11-08-2010, 08:25
Что-то затихло здесь. Оживлю форум своим вопросом, может тупым, но этот вопрос для меня умный.
Вопрос: есть вот такой список компонентов:
Name: pl; Description: Плееры; Types: full;
Name: pl\kmp; Description: The KMPlayer 2.9.4.1437; Types: full recom
Name: pl\gom; Description: GOM Player 2.1.23.5007 Rus; Types: full
Name: pl\mpc; Description: Media Player Classic Home Cinema 1.3.1249.0; Types: full
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: Зарегестрировать файлы на:; Types: full recom
Name: pl\fl\kmp; Description: The KMPlayer; Flags: exclusive; Types: full recom
Name: pl\fl\gom; Description: GOM Player; Flags: exclusive
Name: pl\fl\mpc; Description: Media Player Classic Home Cinema; Flags: exclusive
Список плееров для установки и на какой плеер регистрировать файлы. Как сделать так, чтобы при выборе к установке плеера MPC нельзя было зарегить файлы на GOM и KMP???
Еще вопросик - есть и облегченная версия этого дистра - без плееров. Каждый раз немного напрягает по всему коду вырезать руками Components: pl. Можно ли как то поставить условие в скрипте на облегченный дистр - IsLite=1 и все Components: pl не включались в итоговый лайт-дистр?
Помогите пожалуйста
http://ipicture.ru/uploads/100814/thumbs/4XRsoHs5A3.png (http://ipicture.ru/Gallery/Viewfull/857338.html)
moov1kk у тебя нет процессора вот скачай http://files.jrsoftware.org/ispack/ispack-5.3.10.exe при установки поставь галочки
маркузяка
14-08-2010, 17:19
я тут попробовал использовать вот этот скрипт
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: compiler:Libraries\get_hw_caps.dll; Flags: dontcopy
[Code]
function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function InitializeSetup(): Boolean;
var
i, count: Integer;
msg: string;
begin
count:= GetHardDrivesCount();
msg:= 'Количество дисков: ' + IntToStr(count) + #13;
for i:= 0 to count - 1 do
msg:= msg + 'Размер: ' + GetHardDriveName(i) + ' - ' +
IntToStr(GetHardDriveTotalSpace(i)) + ' Мб' +
', своб.: ' + IntToStr(GetHardDriveFreeSpace(i)) + ' Мб' +#13;
MsgBox(msg, mbInformation, MB_OK);
end;
на версии от restools вылезела ошибка
http://s004.radikal.ru/i208/1008/e0/c60737ca1960.jpg (http://www.radikal.ru)
почему и как исправить?
P.S. скрипт отсюда (http://forum.oszone.net/post-1279946-503.html)
vint56 большое спасибо =)
alex2010
14-08-2010, 23:59
маркузяка, ХЗ у меня робит:
http://10pix.ru/img1/1050/2079225.th.jpg (http://10pix.ru/view/1050/2079225/)
Народ, простите за возможно тупой вопрос, но мне просто довольно лень лазить по 219 страницам форума
Мну нужен код для изменения положения кннопок далее, назад и т.д. и строки где указываеться путь установки, заранее благодарю...
Habetdin
15-08-2010, 05:42
маркузяка, замените PChar на PAnsiChar:
[Code]
function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PAnsiChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function InitializeSetup(): Boolean;
var
i, count: Integer;
msg: string;
begin
count:= GetHardDrivesCount();
msg:= 'Количество дисков: ' + IntToStr(count) + #13;
for i:= 0 to count - 1 do
msg:= msg + 'Размер: ' + GetHardDriveName(i) + ' - ' +
IntToStr(GetHardDriveTotalSpace(i)) + ' Мб' +
', своб.: ' + IntToStr(GetHardDriveFreeSpace(i)) + ' Мб' +#13;
MsgBox(msg, mbInformation, MB_OK);
end;
у меня робит »
У вас ansi-версия компилятора :happy:
R.i.m.s.k.y.
16-08-2010, 08:23
народ, а мне кто нить подскажет?
чтобы при выборе к установке плеера MPC нельзя было зарегить файлы на GOM и KMP??? »
Не понял суть вопроса, у вас сейчас и так стоят флаги exclusive, уточните что вы хотите сделать...
Можно ли как то поставить условие в скрипте на облегченный дистр - IsLite=1 и все Components: pl не включались в итоговый лайт-дистр? »
Так и сделайте в скрипте проверку, т.е. добавьте условие к тем компонентам, которые отображать не нужно, пример:
[Components]
Name: pl; Description: Плееры; Types: full
Name: pl\kmp; Description: The KMPlayer 2.9.4.1437; Types: full recom; Check: IsLite
Name: pl\gom; Description: GOM Player 2.1.23.5007 Rus; Types: full; Check: IsLite
Name: pl\mpc; Description: Media Player Classic Home Cinema 1.3.1249.0; Types: full; Check: IsLite
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: Зарегестрировать файлы на:; Types: full recom
Name: pl\fl\kmp; Description: The KMPlayer; Flags: exclusive; Types: full recom
Name: pl\fl\gom; Description: GOM Player; Flags: exclusive
Name: pl\fl\mpc; Description: Media Player Classic Home Cinema; Flags: exclusive
[Code]
const
sLite = False;
function IsLite: Boolean;
begin
Result := sLite;
end;
R.i.m.s.k.y.
16-08-2010, 15:53
Так и сделайте в скрипте проверку, т.е. добавьте условие к тем компонентам, которые отображать не нужно, пример: »
Сделал, в лайт версии IsLite возвращает True, в полной - False (не легкая сборка)
Робит, в списке компонентов не появляется, но лайт-сборка весит как полная, резать по скрипту не хочется - можно че-нить пропустить или приотрезать лишнего.
Про выбор плееров: выбираю для установки KMP и MPC - надо чтобы можно было зарегить файлы либо на KMP или MPC (это сделано флагом exclusive) но нельзя было выбрать GOM. В текущей реализации можно для установки выбрать KMP и MPC и зарегить видеофайлы на GOM, что неправильно. Как сделать так, чтобы регистрация видеофайлов становилась активной при выборе соответствующего плеера?
Это я RimPack дотачиваю.
можно че-нить пропустить или приотрезать лишнего. »
при большом желании, можно хоть что, пример:
; здесь указываем какая версия, т.е. облегчённая или нет...
# define IsLite = False
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Types]
Name: full; Description: Полная установка
Name: recom; Description: Выборочная установка; Flags: iscustom
[Components]
Name: pl; Description: Плееры; Types: full
#if IsLite == True
Name: pl\kmp; Description: The KMPlayer 2.9.4.1437; Types: full recom
Name: pl\gom; Description: GOM Player 2.1.23.5007 Rus; Types: full
#endif
Name: pl\mpc; Description: Media Player Classic Home Cinema 1.3.1249.0; Types: full
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: Зарегестрировать файлы на:; Types: full recom
Name: pl\fl\kmp; Description: The KMPlayer; Flags: exclusive; Types: full recom
Name: pl\fl\gom; Description: GOM Player; Flags: exclusive
Name: pl\fl\mpc; Description: Media Player Classic Home Cinema; Flags: exclusive
[Files]
#if IsLite == True
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: pl\kmp; Flags: ignoreversion
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: pl\gom; Flags: ignoreversion
#endif
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: pl\mpc; Flags: ignoreversion
Как сделать так, чтобы регистрация видеофайлов становилась активной при выборе соответствующего плеера? »
т.е. если мы снимаем отметку с чебокса какого-то плеера, то и соответствующий радиобатон был не доступен?
Если да, то нужно просто добавить функцию обработки кликов.
Если надо, чуть позже накидаю пример...
medved_orbitel
16-08-2010, 18:22
как сделать так,что на протяжении всего процесса установки в инсталле стояла моя картинка,а не белый фон,скрипт могу написать
ПОМОГИТЕЕЕЕЕЕ!!!!!!!!!!!!!!!!
Не могу токлом найти информацию: как использовать два раза функцию InitializeSetup? Вот два скрипта:
Function InitializeSetup: Boolean; Begin
If Uppercase(ExpandConstant('1.6.02')) = Uppercase(ExpandConstant('{reg:HKLM\Software\GSC Game World\STALKER-COP,installvers}')) then Result:= True else
Begin; Result:= True; MsgBox('Тут текст какой-то ', mbInformation, mb_Ok); end;
End;
procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://tfile.ru','', '', SW_SHOW, ewNoWait, ErrorCode)
end;
procedure InitializeWizard();
begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;
function InitializeSetup :Boolean;
begin
if DirExists({reg:HKLM\Software\GSC Game World\STALKER-COP,installvers}\gamedata) then
DelTree({reg:HKLM\Software\GSC Game World\STALKER-COP,installvers}\gamedata, True, True, True);
end;
И еще: где-то видел скрипт, который сворачивает окно распаковки в маленькое в углу типа Installshield. Где можно найти пример того скрипта, а то я у себя его найти не могу...
R.i.m.s.k.y., накидал вам пример, как это делается:
; здесь указываем какая версия
# define IsLite = True
; задаём описания компонентов
# define kmpDesc "The KMPlayer 2.9.4.1437"
# define gomDesc "GOM Player 2.1.23.5007 Rus"
# define mpcDesc "Media Player Classic Home Cinema 1.3.1249.0"
# define aDesc "Зарегестрировать файлы на:"
# define kDesc "The KMPlayer"
# define gDesc "GOM Player"
# define mDesc "Media Player Classic Home Cinema"
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Types]
Name: full; Description: Полная установка
Name: recom; Description: Выборочная установка; Flags: iscustom
[Components]
Name: pl; Description: Плееры; Types: full
#if IsLite == True
Name: pl\kmp; Description: {#kmpDesc}; Types: full recom
Name: pl\gom; Description: {#gomDesc}; Types: full
#endif
Name: pl\mpc; Description: {#mpcDesc}; Types: full
Name: pl\mpc\mpcdxva; Description: Аппаратное ускорение воспроизведения h264 и VC-1; Flags: checkablealone dontinheritcheck
Name: pl\fl; Description: {#aDesc}; Types: full
#if IsLite == True
Name: pl\fl\kmp; Description: {#kDesc}; Flags: exclusive; Types: full recom
Name: pl\fl\gom; Description: {#gDesc}; Flags: exclusive
#endif
Name: pl\fl\mpc; Description: {#mDesc}; Flags: exclusive
[Files]
#if IsLite == True
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: pl\kmp; Flags: ignoreversion
Source: compiler:Examples\Readme-ru.txt; DestDir: {app}; Components: pl\gom; Flags: ignoreversion
#endif
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: pl\mpc; Flags: ignoreversion
[Code]
var
kmp, gom, mpc, aReg, kReg, gReg, mReg: Integer;
procedure CorCheck;
{ корректируем отмеченность радиобатонов }
var
i: Integer;
begin
for i := kReg to mReg do
if WizardForm.ComponentsList.ItemEnabled[i] then
begin
WizardForm.ComponentsList.Checked[i] := True;
Break;
end;
end;
procedure ComponentsListClick(Sender: TObject);
var
Correct: Boolean;
begin
Correct := True;
{ сразу проверим, все ли интиресующие компоненты доступны... }
if not WizardForm.ComponentsList.Checked[kmp] and
not WizardForm.ComponentsList.Checked[gom] and
not WizardForm.ComponentsList.Checked[mpc] then
{ если нет, снимем отметку с aDesc }
WizardForm.ComponentsList.Checked[aReg] := False;
{ в зависимости от того на кого кликнули, производим действия }
case WizardForm.ComponentsList.ItemIndex of
kmp: WizardForm.ComponentsList.ItemEnabled[kReg] := WizardForm.ComponentsList.Checked[kmp];
gom: WizardForm.ComponentsList.ItemEnabled[gReg] := WizardForm.ComponentsList.Checked[gom];
mpc: WizardForm.ComponentsList.ItemEnabled[mReg] := WizardForm.ComponentsList.Checked[mpc];
else Correct := False;
end;
if Correct then
CorCheck;
{ перерисуем лист компонентов }
WizardForm.ComponentsList.Repaint;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectComponents then
begin
{ выполняем в случае если IsLite := True }
#if IsLite == True
{ узнаем порядковые номера наших компонентов... }
kmp := WizardForm.ComponentsList.Items.IndexOf('{#kmpDesc}');
gom := WizardForm.ComponentsList.Items.IndexOf('{#gomDesc}');
mpc := WizardForm.ComponentsList.Items.IndexOf('{#mpcDesc}');
aReg := WizardForm.ComponentsList.Items.IndexOf('{#aDesc}');
kReg := WizardForm.ComponentsList.Items.IndexOf('{#kDesc}');
gReg := WizardForm.ComponentsList.Items.IndexOf('{#gDesc}');
mReg := WizardForm.ComponentsList.Items.IndexOf('{#mDesc}');
WizardForm.ComponentsList.OnClick := @ComponentsListClick;
#endif
end;
end;
на протяжении всего процесса установки в инсталле стояла моя картинка »
в шапке темы есть ссылка на пример, "Ссылки на примеры скриптов:" > "Картинка на страницах инсталлятора"
как использовать два раза функцию InitializeSetup? »
никак, одинаковых процедур быть не может, делается путём объединения кода, либо руками, либо InnoSetup Script Joiner из шапки темы.
Вы откуда брали код? просто первая function InitializeSetup, там всегда результат True. т.е. будет запускаться инстал всегда, а вторая function InitializeSetup не рабочая.
R.i.m.s.k.y.
17-08-2010, 08:22
Serega,
СПАСИБИЩЕ!!!
Первую- я специально сделал чтоб появлялось только сообщение, а установка продолжалась. А вот по поводу второй- мне надо скрипт, который будет удалять папку, в которую будут ставиться файлы программы.
UltimaReDragON
17-08-2010, 10:19
парни, привет. Нуждаюсь в вашей помощи) Комплияция проходит успешно. Но подскажите пожалуйста, как можно сменить значки? (см. ниже) http://s002.radikal.ru/i199/1008/fe/f86ef057effct.jpg (http://radikal.ru/F/s002.radikal.ru/i199/1008/fe/f86ef057effc.png.html)http://s41.radikal.ru/i093/1008/3a/3a5cdab5e669t.jpg (http://radikal.ru/F/s41.radikal.ru/i093/1008/3a/3a5cdab5e669.png.html)
http://rghost.ru/2364155
R.i.m.s.k.y.
17-08-2010, 14:40
Вот такой инно-код для тихой установки без вопросов
[Setup]
DisableDirPage=true
DisableProgramGroupPage=true
DisableReadyPage=true
DisableFinishedPage=true
DisableStartupPrompt=true
DisableReadyMemo=true
[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpReady then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpPreparing then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpInstalling then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpInfoAfter then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpLicense then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpPassword then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpInfoBefore then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpUserInfo then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpSelectDir then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpSelectComponents then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpSelectProgramGroup then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpSelectTasks then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpReady then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpPreparing then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpInstalling then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpInfoAfter then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
If CurPageID=wpFinished then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;
При запуске инсталлера все равно появляется одно окно "Все готово к установке. Нажмите установить чтобы продолжить". Как его убрать, как сделать так бы при запуске экзешника все ставилось без нажатий далее/установить?
Про параметры /silent знаю, но сейчас не подходят
Вот такой инно-код для тихой установки без вопросов »
зачем для каждой страницы писать одно и то же, нужно просто было задать для всех страниц это действие...
Как его убрать, как сделать так бы при запуске экзешника все ставилось без нажатий далее/установить? »
допустим так:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
{ отобpажает или пpячет окно обpазом, указанным паpаметpом в nCmdShow }
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';
const
{ обычный клик }
BM_CLICK = $00F5;
procedure CurPageChanged(CurPageID: Integer);
{ на старых версиях IS достаточно было указать
WizardForm.NextButton.OnClick(WizardForm.NextButton);
сейчас же стопориться на странице wpReady, обходится это таким образом }
begin
{ использую для скрытия окна мастера, в противном случае видно страницу wpInstalling }
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), SW_HIDE);
{ здесь нажимаем кнопку... }
PostMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.