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

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

Автор: Genri
Дата сообщения: 04.04.2007 00:23
NightW0lf

Код:
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: Files\*; DestDir: {app}

[Сode]
const
NeedSize = 20; //Прописать, сколько мегабайт необходимо

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

var
ListBox: TListBox;

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

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

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: String;
i: Integer;
begin
for i:= 0 to ListBox.Items.Count-1 do
begin
if ListBox.Selected[i] then
begin
NewLetter:= Copy(ListBox.Items[i], 0, 1);
OldString:= Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text:= NewLetter + OldString;
end;
end;
end;

procedure InitializeWizard();
var
Path: String;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;
ListBox.OnClick:= @ListBoxOnClick;

drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Всего: ' + IntToStr(TotalMB) +
'Мб - Свободно: ' + IntToStr(FreeMB) + 'Мб');
end;
end;
end;
end;

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;
end;
Автор: Sampron
Дата сообщения: 04.04.2007 00:59
Genri
У меня этот код не работает в нём даже подсветки синтаксиса нет.

Добавлено:
Всё работает в слове [Сode] был русский символ.
Автор: Sish
Дата сообщения: 04.04.2007 07:18
Genri
А вот с этим не поможешь при случае?

Заранее спасибо!
Автор: maxdddca123
Дата сообщения: 04.04.2007 08:51
Sampron
Спасибо, а картинка максимум Width:=417
Height:=237 размера ? Мне бы побольше надо. Тут можно бОльшие цифры написать ?
Автор: Sampron
Дата сообщения: 04.04.2007 11:53
maxdddca123
На новой странице я не смог это сделать но можно сделать на готовой странице wpInfoAfter и в инсталлятор прийдётся включать пустой текстовый файл но отображатся он не будет.
[Setup]
InfoAfterFile=C:\text.txt

[Files]
Source: C:\Image.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
var
BitmapImage: TBitmapImage;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpInfoAfter then
begin
ExtractTemporaryFile('Image.bmp')
BitmapImage:=TBitmapImage.Create(WizardForm)
with BitmapImage do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.InfoAfterPage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Image.bmp')
end
WizardForm.InnerNotebook.Top:=0
WizardForm.InnerNotebook.Left:=0
WizardForm.InnerNotebook.Width:=497
WizardForm.InnerNotebook.Height:=313
WizardForm.MainPanel.Visible:=False
WizardForm.Bevel1.Visible:=False
WizardForm.InfoAfterMemo.Visible:=False
WizardForm.InfoAfterClickLabel.Visible:=False
end
end;
Автор: NightW0lf
Дата сообщения: 04.04.2007 13:56
Genri
СПАСИБО тебе за твои труды!
Автор: lodoss
Дата сообщения: 04.04.2007 17:06
Привет всем, о Inno Setup недавно узнал, начинающий
подскажите пожалуйста, какой программкой можно отследить все изменения в системе при установке какой либо программы?

PS Можно на форуме открыть сразу все 95 страниц в одной ?, а то по одной просматривать неудобно
Автор: GloThin
Дата сообщения: 04.04.2007 17:54
lodoss
20:06 04-04-2007
Цитата:
PS Можно на форуме открыть сразу все 95 страниц в одной ?, а то по одной просматривать неудобно

Можно:
Таким образом
Автор: Sero
Дата сообщения: 04.04.2007 18:27

Цитата:
подскажите пожалуйста, какой программкой можно отследить все изменения в системе при установке какой либо программы?


RegShot
Скачать
(55Kb)
Автор: NightW0lf
Дата сообщения: 04.04.2007 19:41
Genri
А не сможешь помочь с реализацией вот этого тоже из S.T.A.L.K.E.R.
Автор: Angel_Smerti
Дата сообщения: 04.04.2007 21:17

Цитата:
RegShot
Скачать
(55Kb)

Ссылка битая, файл не скачивается.
Автор: NightW0lf
Дата сообщения: 04.04.2007 21:50
Angel_Smerti

Цитата:
Ссылка битая, файл не скачивается.

Можешь качать из шапки там рабочая линка.
Автор: Angel_Smerti
Дата сообщения: 04.04.2007 22:01
Genri
Помоги соединить твой скрипт:

Цитата:
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: Files\*; DestDir: {app}

[Сode]
const
NeedSize = 20; //Прописать, сколько мегабайт необходимо

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

var
ListBox: TListBox;

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

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

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: String;
i: Integer;
begin
for i:= 0 to ListBox.Items.Count-1 do
begin
if ListBox.Selected[i] then
begin
NewLetter:= Copy(ListBox.Items[i], 0, 1);
OldString:= Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text:= NewLetter + OldString;
end;
end;
end;

procedure InitializeWizard();
var
Path: String;
FreeMB, TotalMB: Cardinal;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;
ListBox.OnClick:= @ListBoxOnClick;

drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Всего: ' + IntToStr(TotalMB) +
'Мб - Свободно: ' + IntToStr(FreeMB) + 'Мб');
end;
end;
end;
end;

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;
end;

Со скриптом:

Цитата:
[Setup]
WizardImageFile=compiler:winxp.bmp
WizardSmallImageFile=compiler:winxp.bmp

[Code]
procedure InitializeWizard();
var
Page: TWizardPage;
begin
WizardForm.BackButton.BringToFront;
WizardForm.NextButton.BringToFront;
WizardForm.CancelButton.BringToFront;
WizardForm.InnerNotebook.BringToFront;
end;

Оба скрипта взяты с этого сайта и так как я в программировании просто профан, то сам с этим не справлюсь. Простое слияние выдает ошибку, потому что во всех скриптах есть строка с переменной: procedure InitializeWizard();.
Автор: NightW0lf
Дата сообщения: 04.04.2007 22:40
Angel_Smerti

Цитата:


Код:
[Setup]
WizardImageFile=compiler:winxp.bmp
WizardSmallImageFile=compiler:winxp.bmp


Код:
procedure InitializeWizard();
var
Page: TWizardPage;
begin
WizardForm.BackButton.BringToFront;
WizardForm.NextButton.BringToFront;
WizardForm.CancelButton.BringToFront;
WizardForm.InnerNotebook.BringToFront;
end;

Автор: Sampron
Дата сообщения: 04.04.2007 22:50
Angel_Smerti
В руководстве 5-ой версии есть примеры скинов используй их а не этот первый эксперементальный.
Автор: kxox
Дата сообщения: 04.04.2007 23:24
Genri, большое спасибо

Добавлено:
и вопрос на засыпку...
есть строка:

Код: NeedSize = 2000; //прописать количество метров
Автор: Genri
Дата сообщения: 05.04.2007 01:34
kxox -- К сожалению, способа получить доступ к этой переменной я не знаю. Разве что вытянуть число из отображаемой строки. Но на мой взгляд, задача не стоит требуемых усилий. В любом случае, общий размер ты знаешь на этапе компиляции и проще прописать константу.
Автор: Sampron
Дата сообщения: 05.04.2007 11:07
Genri
Загляни в личку.
Автор: PSKOVMAIL
Дата сообщения: 05.04.2007 11:30
Да код сиз Сталкера с определением устройств было бы неплохо заполучить!!!
Автор: Genri
Дата сообщения: 05.04.2007 12:10
По поводу определения устройств - времени сейчас особо нет (да и праздники еще), но если кому интересно, можно покопать в сторону WinAPI EnumDisplayDevices и данных в реестре по пути: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
ключи:
ProcessorNameString
~MHz

Добавлено:
Sampron
Цитата:
Загляни в личку.
-- я оттуда не вылезаю От тебя последнее 01:09 31-03-2007 - решение выше. NSIS не использую.

Автор: ANDROID
Дата сообщения: 05.04.2007 12:42
PSKOVMAIL
Они в инсталяторе СТАЛКЕРа используют свой собственный плагин: get_hw_caps.dll (Installer plugin, HW caps detection)
Автор: NightW0lf
Дата сообщения: 05.04.2007 13:29

Цитата:
Они в инсталяторе СТАЛКЕРа используют свой собственный плагин: get_hw_caps.dll (Installer plugin, HW caps detection)

Если кому нужен этот плагин забираем.
Автор: koc
Дата сообщения: 05.04.2007 15:13
Kindly
а какая прога создает список всех папок/подпапок в текстовом виде?
Автор: flyweb
Дата сообщения: 05.04.2007 15:36

Цитата:
Если кому нужен этот плагин забираем.


А как его использовать не подскажите!!!
Автор: NightW0lf
Дата сообщения: 05.04.2007 16:27
flyweb

Цитата:
А как его использовать не подскажите!!!

Сам я незнаю, НО я затем и выложил этот плагин чтобы кто-нибудь помог с ним разобраться.
Автор: Angel_Smerti
Дата сообщения: 05.04.2007 17:38
NightW0lf

Цитата:
Вот собранный код

Код я получил, но и проблему очередную тоже вот что получается, когда используешь сборку, а должно быть так. Как исправить текст с бесцветного на черный?
Автор: Sampron
Дата сообщения: 05.04.2007 18:16
Angel_Smerti

Между строками:
ListBox.OnClick:=@ListBoxOnClick
и
drives:= GetLogicalDrives();

вставь либо эту строку:
ListBox.Font.Color:=clBlack
либо эту
ListBox.Color:=11494715

на твой вкус.

Автор: Genri
Дата сообщения: 05.04.2007 18:23
flyweb
Цитата:
как его использовать

Подробно разбираться нет времени, но примерно так:

Код:
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: Files\get_hw_caps.dll; Flags: dontcopy

[Code]
function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

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 GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';


function InitializeSetup(): Boolean;
var
res: string;
begin
res:= 'GetVideoCardName - ' + GetVideoCardName + #10#13;
res:= res + 'GetSoundCardName - ' + GetSoundCardName + #10#13;
res:= res + 'DetectHardware - ' + IntToStr(DetectHardware()) + #10#13;
res:= res + 'GetHardDriveName - ' + GetHardDriveName(0) + #10#13;
res:= res + 'GetHardDriveFreeSpace - ' + IntToStr(GetHardDriveFreeSpace(0)) + #10#13;
res:= res + 'GetHardDriveTotalSpace - ' + IntToStr(GetHardDriveTotalSpace(0)) + #10#13;
res:= res + 'GetHardDrivesCount - ' + IntToStr(GetHardDrivesCount()) + #10#13;
res:= res + 'GetSoundCards - ' + IntToStr(GetSoundCards()) + #10#13;
res:= res + 'GetSystemPage - ' + IntToStr(GetSystemPage()) + #10#13;
res:= res + 'GetSystemPhys - ' + IntToStr(GetSystemPhys()) + #10#13;
res:= res + 'GetVidMemLocal - ' + IntToStr(GetVidMemLocal()) + #10#13;
res:= res + 'GetVidMemNonLocal - ' + IntToStr(GetVidMemNonLocal()) + #10#13;
res:= res + 'GetVideoCardDev - ' + IntToStr(GetVideoCardDev()) + #10#13;
res:= res + 'GetVideoCardVen - ' + IntToStr(GetVideoCardVen()) + #10#13;

MsgBox(res, mbInformation, MB_OK);
Result:= True;
end;
Автор: NightW0lf
Дата сообщения: 05.04.2007 18:37
Кто нибудь знает, как можно добавить надпись в заголовок этого диалога
[more=Вот код]

Код:
[code]
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel := False;
Confirm := False;
if MsgBox('Вы действительно хотите прервать установку?', mbError, MB_YESNO) = idYes
then
Cancel := true;
end;
Автор: Angel_Smerti
Дата сообщения: 05.04.2007 18:45
NightW0lf

Цитата:
А ты случайно остальную часть кода не забыл?
Так как ты по идеи [я считаю] хочешь, чтобы было похоже на это, а с твоим кодом получается вот это.
Я прав?

Извини, что отвечаю на твой первый вопрос в последнюю очередь, но надо было посмотреть по сайту, где находятся скрипт WinXP, его первый выложил и улучшил Sampron. К скрипту еще нужен измененный файл Setup.e32 из дистрибутива Inno Setup. Скрипт собран, верно, но текст на странице с выбором дисков должен быть черный как я уже упоминал, как этого добится я все равно не доперю, и надеюсь на помощь.

Добавлено:
Прошу прощения со своей последней цитатой я немножко запоздал, ВСЕМ БОЛЬШОЕ СПАСИБО!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: ICONS


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