Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Sig666
Дата сообщения: 25.01.2008 18:51
Еще еще вопросец.

Допустим, для нормальной установки требуется 1gb свободного места, а для бекапа еще 2gb. Хотелось бы, что бы при нормальной установке, при условии недостаточного места выскакивало сообщение "Недостаточно места на диске", а при обычной установке+выбрано задание "backup" (т.е. тут уже необходима проверка на наличие 3гб места) выскакивало сообщение "Недостаточно места на диске для выполнения резервного копирования"

и второй вопрос: скрипт для определения размера файлов в папке назначения из руководства Kindly - не получается добавить проверку для более чем 3х файлов.
Буду благодарен за помощь.

Задача решена применением следующего срипта:

const
NeedSize = 5000; //Прописать, сколько мегабайт необходимо
NeedSizeBackup = 15000; //Прописать, сколько мегабайт необходимо для бекапа

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Недостаточно места на диске!', mbInformation, MB_OK)
Result:= False;
end;
end

else
Result:= True;
if IsTaskSelected('backup') then
if CurPageID = wpSelectTasks then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSizeBackup then
begin
MsgBox('Недостаточно места на диске для выполнения резервного копирования!', mbInformation, MB_OK)
Result:= False;
end;
end;
end;
Автор: Kutsenko
Дата сообщения: 25.01.2008 20:56
iTASmania_Inc
Срочно прошу помощи!!!
Ты мне дал скрипт ввода пароля по секциям, но я не могу совместить его с InnoSetupUpgrade Виктора Доброва. Помоги мне пожалуйста, очень срочно нада.
Ругается на то что повторяется function MessageBox и Function NextButtonClick.
Вот ссылка на твой скрипт
http://forum.ru-board.com/topic.cgi?forum=5&topic=24767&start=664&limit=1&m=1#1
Автор: iTASmania_Inc
Дата сообщения: 25.01.2008 21:43
Kutsenko
Пожалуйста.
Автор: Kutsenko
Дата сообщения: 25.01.2008 22:23
iTASmania_Inc спасибо огромное что переделал, но возникает ещё одна проблемка. Когда я добавляю твои два скрипта Serial.iss и InnoSetupUpgrade.iss в свой то компилирует всё нормально, запускает, но когда нажимаю на кнопку "далее", то выдаёт вот такую ошибку:

Runtime error (at 110:54):
Could not call proc.

Вот мой [more=Скрипт..]
[Setup]
AppName=Juiced 2
AppVerName=Juiced 2 v1.0
AppPublisher=Pirated Evolution
DefaultDirName={pf}\Juiced 2
DefaultGroupName=Pirated Evolution\Juiced 2
DisableProgramGroupPage=true
OutputDir=output\
OutputBaseFilename=setup
SetupIconFile=Ico.ico
Compression=lzma/ultra64
SolidCompression=true
DiskSpanning=true
DiskSliceSize=2000000000
AllowNoIcons=true
VersionInfoCompany=Pirated Evolution
VersionInfoDescription=Установка Juiced 2
VersionInfoVersion=1.0
UninstallLogMode=overwrite
WizardImageFile=1.bmp
WizardSmallImageFile=2.bmp
LicenseFile=License.rtf
UninstallFilesDir={app}\PE\
InternalCompressLevel=ultra64
VersionInfoCopyright=Pirated Evolution™


[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}


[_ISToolPreCompile]
#include AddBackslash(SourcePath) +"InnoSetupUpgrade.iss"
#include AddBackslash(SourcePath) + "Serial.iss"

[Files]
Source: InnoCallback.dll; Flags: dontcopy
Source: License.rtf; DestDir: {tmp}; Flags: dontcopy noencryption

[Icons]
Name: {group}\Запустить; Filename: {app}\j2Launcher.exe; WorkingDir: {app}\;
Name: {group}\Удалить; Filename: {uninstallexe}
Name: {userdesktop}\Juiced 2; Filename: {app}\j2Launcher.exe; WorkingDir: {app}\; Tasks: desktopicon

[Registry]
Root: HKLM; Subkey: Software\PE\; ValueType: string
Root: HKLM; Subkey: Software\PE\JHN2; ValueType: string; ValueName: Install Dir; ValueData: {app}
Root: HKLM; Subkey: Software\PE\JHN2; ValueType: string; ValueName: InstallPath; ValueData: {app}
Root: HKLM; Subkey: Software\PE\JHN2; ValueType: string; ValueName: MainExe; ValueData: {app}\j2Launcher.exe
Root: HKLM; Subkey: Software\PE\JHN2; ValueType: string; ValueName: UninstallString; ValueData: {uninstallexe}
Root: HKLM; Subkey: Software\PE\SJHN2; Flags: uninsdeletekey

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
EM_GETFIRSTVISIBLELINE = $CE;
TestLine = 68;
var
TimerID: LongWord;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
CurrLine: integer;
begin
CurrLine:= SendMessage(WizardForm.LicenseMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
If CurrLine >= TestLine then
WizardForm.LicenseAcceptedRadio.Enabled:= True;

// WizardForm.Caption:= IntToStr(CurrLine);
end;


Procedure InitializeWizard;
var
Text: TNewStaticText;
Page: TWizardPage;
width, height:Integer;
License: string;
begin
begin
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.PageNameLabel.Visible:= False; {или Hide}
WizardForm.PageDescriptionLabel.Visible:= False;
WizardForm.BorderIcons:=[biMinimize]
WizardForm.LicenseAcceptedRadio.Enabled:= False;
{значения системных требований (необязательно)}    NeedSys:= 5.1; NeedSp:= 2; NeedMB:= 250; NeedMHZ:= 1800; NeedRAM:= 512; NeedVRAM:= 128; NeedSwap:= 960; NeedSoundCard:= 'Creative'; NeedRegKey:= 'Software\Microsoft\.NETFramework'; NeedRegKeyOK:=' Пакет Microsoft .NET Framework установлен'; NeedRegKeyNO:=' Требуется установить Microsoft .NET Framework'
    InnoUpgrade    { InnoSetup Add-on by Victor Dobrov }
    
with WizardForm do
begin

with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left:= ScaleX(0);
Top:= ScaleY(0);
Height:=Mainpanel.Height;
Width:=MainPanel.Width;
end;
end;
end;

{********************Для корректного отображения rtf файлов**********}
ExtractTemporaryFile('License.rtf');
LoadStringFromFile(ExpandConstant('{tmp}') + '\License.rtf', License)
WizardForm.LicenseMemo.RTFText := License;

end;
End;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpLicense then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 100, pfunc);
end else
KillTimer(0, TimerID);
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
[/more]
Автор: iTASmania_Inc
Дата сообщения: 25.01.2008 22:47
Странно, как ошибка не возникала до этого? o_O
Ведь отсутствует WidowsHook.iss, по которому идут операции с таймером. Сам скрипт находится в архиве Corona Skin.
Автор: Kutsenko
Дата сообщения: 25.01.2008 22:56
iTASmania_Inc
Ошибка была в другом. Я чтото продуплил, забыл дописать SerialPage() в свой скрипт, поэтому и писало ошибку. Ещё раз спасибо за переделку скрипта .

Добавлено:
iTASmania_Inc
Не подскажеш почему инсталятор начинает очень долго грузится (секунд 20-28) после того как я запихаю файлов гдето на метров 180, если мало запихаю в инстал то грузится быстро, в чём может быть ошибка? Скрипт какой я выкладывал что на 3 сообщения выше, именно им я польуюсь. Может какаято ошибка в скрипте?
Строку для большой папки откуда запихаются все файлы в инсталятор я пишу так:
Source: F:\WORK\juiced 2\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;
Автор: iTASmania_Inc
Дата сообщения: 26.01.2008 09:38
Kutsenko

Цитата:
очень долго грузится (секунд 20-28)

Файлы, которые извлекаются во временную папку стоят в начале секции [Files]? Если да, то инсталлятор будет перебирать все файлы, пока не дойдёт до них --> отсюда задержки перед запуском. Как выход: перемещай все временные файлы в начало секции (если их немного), либо просто допиши к ним флаг solidbreak.
Автор: elchupakabra
Дата сообщения: 26.01.2008 10:31
Подскажите пожалуйста (пробежался по хелпу и примерам не нашёл) в какай секции и что необходимо прописать для встраивания устанавливаемой программы в автозагрузку.
Заранее спасибо.
Автор: iTASmania_Inc
Дата сообщения: 26.01.2008 10:44
elchupakabra
В секции [Registry] создаётся ключ:
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: ----; ValueData: ----;
В ValueName и ValueData уже непоследственно указывается, что загружается и откуда.
Автор: Kutsenko
Дата сообщения: 26.01.2008 10:49
iTASmania_Inc
А как именно дописывать тот флаг solidbreak , ведь у меня стоит совсем другой флаг?
Автор: iTASmania_Inc
Дата сообщения: 26.01.2008 10:53
Kutsenko
Флагов может быть сколько угодно, главное, чтобы они разделялись пробелами.
Пример: Source: License.rtf; DestDir: {tmp}; Flags: dontcopy noencryption
Автор: Kutsenko
Дата сообщения: 26.01.2008 11:02
И этот флаг solidbreak добавлять до всех файлов которые будут кидаться в темп
или наоборот только к той папке с которой все файлы будут копироваться в инсталятор?
Автор: Sig666
Дата сообщения: 26.01.2008 17:54
Помогите пожалуйста скрестить этот [more=скрипт]
function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Недостаточно места на диске!', mbInformation, MB_OK)
Result:= False;
end;
end

else
Result:= True;
if IsTaskSelected('backup') then
if CurPageID = wpSelectTasks then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSizeBackup then
begin
MsgBox('Недостаточно места на диске для выполнения резервного копирования!', mbInformation, MB_OK)
Result:= False;
end;
end;
end;
[/more]
с [more=этим]
function NextButtonClick(CurPage: Integer): Boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
If CurPage=6 then
//Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения
begin
If (FileSearch('Main.exe', ExpandConstant('{app}'))='')
or (FileSearch('Comp.dll', ExpandConstant('{app}')+'\data')='')
then
begin
s:='Извините, в директории '+ExpandConstant('{app}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.';
MsgBox(s, mbError, mb_Ok);
Result:= False
end
else
//И проверка размера оригинальных файлов
begin
If FileSize(ExpandConstant('{app}')+'\Main.exe', sz)
then
begin
If sz<>270336 //Проверяемый размер в байтах
then
begin
s:='Размер установленого компонента Main.exe не соответствует.' #13#13 'Для установки обновления требуются оригинальные файлы.'; MsgBox(s, mbCriticalError, mb_Ok);
Result:= False
end else
begin
If FileSize(ExpandConstant('{app}')+'\data\Comp.dll', sz)
then
begin
If sz<>3688328
then
begin
s:='Размер установленого компонента Comp.dll не соответствует.' #13#13 ' Для установки обновления требуются оригинальные файлы.'; MsgBox(s, mbCriticalError, mb_Ok);
Result:= False
end;
end;
end;
end;
end;
end;
end;
[/more] (требуется только проверка размера 1 файла)
Автор: serg_aka_lain
Дата сообщения: 26.01.2008 21:45
Sig666

[more]

const
NeedSize = 10;
NeedSizeBackup = 20;

function NextButtonClick(CurPageID: Integer): Boolean;
var
sz : Integer;
Path, s : String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
If (FileSearch('Main.exe', ExpandConstant('{app}'))='') then
begin
s:= 'Нет файла!';
MsgBox(s, mbError, mb_Ok);
Result:= False;
WizardForm.Close;
end

else

begin
If FileSize(ExpandConstant('{app}') + '\Main.exe', sz) then
begin
If sz <> 100000 then
begin
s:= 'Размер файла!';
MsgBox(s, mbError, mb_Ok);
Result:= False;
WizardForm.Close;
end
end
end
end

begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
s:= 'Недостаточно места на диске!';
MsgBox(s, mbInformation, mb_Ok);
Result:= False;
end

else

Result:= True;
if IsTaskSelected('backup') then
if CurPageID = wpSelectTasks then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSizeBackup then
begin
s:= 'Недостаточно места на диске для выполнения резервного копирования!';
MsgBox(s, mbInformation, mb_Ok);
Result:= False;
end
end
end
end;


procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
end;

[/more]

p.s. Проверку присутствия и размер ИМХО лучше при инициализации делать.
Автор: Sig666
Дата сообщения: 26.01.2008 23:20
serg_aka_lain

Спасибо конечно, но мне нужна проверка на этапе выбора директории..

Методом проб и ошибок собрал скрипт, выполняющий все поставленные задачи, но хотелось бы, чтобы в случае нехватки места (даже при установке в неверную директорию) не проводилась проверка на наличие и размер файлов (сейчас при этих условиях выскакивают 2 окошка подряд: о нехватке места и о не обнаружении файлов), что в данном случае нафиг не нужно. Вот как бы избежать этого.
[more=сам скрипт]
function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
sz:Integer;
s:string;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Недостаточно места на диске!', mbInformation, MB_OK)
Result:= False;
end
end


else
Result:= True;
If CurPageID = wpSelectDir then
//Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения
begin
If (FileSearch('run.exe', ExpandConstant('{app}'))='')
then
begin
s:='Извините, в директории '+ExpandConstant('{app}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.';
MsgBox(s, mbError, mb_Ok);
Result:= False
end
else
//И проверка размера оригинальных файлов
begin
If FileSize(ExpandConstant('{app}')+'\run.exe', sz)
then
begin
If sz<>55296 //Проверяемый размер в байтах
then
begin
s:='Размер одного из файлов не соответствует оригиналу.' #13#13 'Для успешной установки требуются оригинальные файлы.'; MsgBox(s, mbCriticalError, mb_Ok);
Result:= False
end;
end;
end;
end

else
Result:= True;
if IsTaskSelected('backup') then
if CurPageID = wpSelectTasks then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSizeBackup then
begin
MsgBox('Недостаточно места на диске для выполнения резервного копирования!', mbInformation, MB_OK)
Result:= False;
end;
end;
end;
[/more]
Автор: serg_aka_lain
Дата сообщения: 26.01.2008 23:58
Sig666

Ну если только это надо то я сделалб так

begin
MsgBox('Недостаточно места на диске!', mbInformation, MB_OK)
Result:= False;
WizardForm.Close;
end

и сразу выход из установки без подтверждения

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
end;

Просто в этой функции (NextButtonClick) при повторном нажатии Next, возможен переход
к следующей странице

или так

begin
MsgBox('Недостаточно места на диске!', mbInformation, MB_OK)
Result:= False;
exit;
end

Проверка на этом просто остановится.

Автор: Sig666
Дата сообщения: 27.01.2008 02:13
serg_aka_lain

3й вариант то что надо. Спасибище.
Автор: Victor_Dobrov
Дата сообщения: 27.01.2008 09:22
Corona Skin & Check System Requirements (473 Кб в архиве) - расширение инсталлятора Inno Setup.

Доработка: Избавил юзеров (да и себя тоже) от вычисления MD5 хэша для пароля и серийника, они теперь указываются в скрипте так, как должны быть набраны, а затем конвертируются/шифруются автоматически в процессе сборки.
Автор: Raf_SE
Дата сообщения: 27.01.2008 16:01
А ктонить знает как сделать чтбы было слайдшоу на весь экран. И файлы которые берутся для него чтобы были в самой инсталяхе. Т.е. для скрипта Victor_Dobrov'а картинки должны быть в папке Slides, а мне нужно чтобы небыло никаких папок, был только инсталлятор. Еще хотелось бы чтобы инсталлятор запускался в левом нижнем углу экрана.
Я знаю что подобный скрипт уже выкладывал Vitalliano, но ссылка на него уже простроченная.
И возможно ли чтобы время показа картинок определялось самой инсталяхой? Т.е. чтоб они не повторялись.
Еще интересует что нужно прописать чтобы деинсталятор спрашивал ли удалять сохранения игры. (прогу от 1с не предлагать)
Автор: Victor_Dobrov
Дата сообщения: 27.01.2008 23:38
Raf_SE, если рисунки будут в инсталляторе, Мастер открывается тем дольше, чем больше файлов (даже при выключенном сжатии)
Автор: Raf_SE
Дата сообщения: 27.01.2008 23:50
Victor_Dobrov На сколько дольше? В принципе мне бы всеравно хотелось протестить и оценить все минусы.

P.S.
Ну просто ОЧЕНЬ нравится функция слайдшоу в InstallShield. Посему хотелось бы максимально под него косить.
Автор: fty
Дата сообщения: 28.01.2008 09:31
exgamer
Спасибо за наводку! Буду разбираться.
Автор: Shizopolis
Дата сообщения: 28.01.2008 11:32
Помогите пожалуйта !
Проблемма:
мне нужен был самый простой инсталятор, который просто копирует файлы в устоновочную директорию и добавляет ярлыки), через Wizard всё очень хорошо получилось.. токо вот одна проблемма в директории устоновки он ещё создаёт унинсталлер (unins000.exe,unins000.dat)что неприемлима для остальных файлов тоесть грубо говоря унинсталлер ненужен.. помогите решить проблемму,что надо прописать в скрипте чтоб унисталерр несоздовался?

код такой получился

Код:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
AppName=MiranDa
AppVerName=MiranDa
AppPublisher=D`josh
DefaultDirName={pf}\MiranDa
DefaultGroupName=MiranDa v.1
AllowNoIcons=yes
LicenseFile=C:\Users\Администратор\Desktop\1.txt
OutputDir=G:\
OutputBaseFilename=MiranDa v.1
SetupIconFile=C:\Users\Администратор\Desktop\alawar.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "G:\Miranda IM\miranda32.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "G:\Miranda IM\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\MiranDa v.1"; Filename: "{app}\miranda32.exe"
Name: "{group}\{cm:UninstallProgram,MiranDa v.1}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\MiranDa v.1"; Filename: "{app}\miranda32.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\MiranDa v.1"; Filename: "{app}\miranda32.exe"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\miranda32.exe"; Description: "{cm:LaunchProgram,MiranDa v.1}"; Flags: nowait postinstall skipifsilent
Автор: fty
Дата сообщения: 28.01.2008 12:18
Shizopolis
В разделе [Setup] добавь Uninstallable=no
Автор: Shizopolis
Дата сообщения: 28.01.2008 14:21

Цитата:
Shizopolis
В разделе [Setup] добавь Uninstallable=no


Спасибо Большое! всё получилось..
Автор: fty
Дата сообщения: 28.01.2008 17:08
Raf_SE
Ссылка для скачивания: http://data.cod.ru/51834224074
Размер файла 114Kb.
Сделай поиск по слову "Слайд", там много примеров того, что ты ищешь.

Этот файл- архив самых полезных примеров из ДВУХ предыдущих веток этого форума по Inno Setup. Файл сделал я сам, примеры не мои.
Автор: KurtWagner
Дата сообщения: 29.01.2008 02:04
Реально ли сделать так щоб тольео после чтения лиц. соглаш. можно было выбирать "Принять" "Отказать" ??? Как в установке STEAM ?????
Автор: Genri
Дата сообщения: 29.01.2008 12:30
KurtWagner

Цитата:
сделать так щоб тольео после чтения лиц. соглаш. можно было выбирать "Принять" "Отказать" ???
-- когда-то кому-то делал.
Есть много способов промотать лицензию (стрелками курсора, PgUp/PgDown, колесиком мыши, потянуть скроллбар). Если перехватывать все эти события, то получится слишком навороченный код. Менее красивое, но более простое решение - использовать таймер, по событиям которого проверять номер верхней отображаемой строки (верхнюю узнать просто, а нижнюю - это опять усложнение. Но думаю, это и не обязвтельно). [more=Пример здесь]
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
LicenseFile=License.rtf

[Files]
Source: InnoCallback.dll; Flags: dontcopy

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
EM_GETFIRSTVISIBLELINE = $CE;
TestLine = 40;
var
TimerID: LongWord;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
CurrLine: integer;
begin
CurrLine:= SendMessage(WizardForm.LicenseMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
If CurrLine >= TestLine then
begin
WizardForm.LicenseAcceptedRadio.Enabled:= True;
KillTimer(0, TimerID);
end;
//WizardForm.Caption:= IntToStr(CurrLine);
end;

procedure InitializeWizard();
begin
WizardForm.LicenseAcceptedRadio.Enabled:= False;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpLicense then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);
end else
KillTimer(0, TimerID);
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
Автор: Dimbay
Дата сообщения: 29.01.2008 18:46
Victor_Dobrov
Такой вопрос:
Мне нужно скопировать unpack.bat(ну это понятно как),там его распаковать(запустить),скопировать всё содержимое , в нужную папку , запаковать и удалить.
Как сделать именно в такой последовательности?
Поставьте меня на нужную лыжню...)))
Заранее благодарен!
Автор: Chanka
Дата сообщения: 29.01.2008 19:12
А как можно добавить файлы в архивы?
Допустим уже установлена игра и там есть файл base.pak - это rar архив.
Мне нужно чтобы патч сделанный инно сетап добавил файлы в этот архив.
Помогите, пожалуйста

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.