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

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

Автор: Kondrbr
Дата сообщения: 21.02.2009 15:33
Скажите, а почему Inno Setup Unpacker распаковывает, но полностью что ли так сказать. Т.е. взял диск от 1С, там инсталятор "блатной" весь с полной картинкой, красивыми кнопками и т.д. Начал упаковывать - он получился без картинок и без остального! Это так и должно быть? Или я чё не так делаю, а.
Автор: LordVeider
Дата сообщения: 21.02.2009 16:20
Inno Setup vs Windows 6/7
В висте и семёрке для определения размера установленного приложения в апллете "программы" панели управления используется параметр реестра EstimatedSize (DWORD), располагающийся там же где (в CurrentVersion/Uninstall/MyProgramName).
Возникает вопрос: как его заполнить при установке ?
Автор: Qarma
Дата сообщения: 21.02.2009 16:42
Kondrbr
Inno Setup Unpacker не выдирает секцию [code]
Автор: Unc1e
Дата сообщения: 21.02.2009 16:59
skeptik_vdm, Sig666 правильно говорит, если ты не знал что такое исходники, то тебе вообще не стоило связываться с этим делом.
Цитата:
Ну объясните что с этим делать???
выучить паскаль и найти где-нибудь Delphi, а дальше там все просто
Автор: kombat 77
Дата сообщения: 21.02.2009 17:31
LordVeider

Цитата:
В висте и семёрке для определения размера установленного приложения в апллете "программы" панели управления используется параметр реестра EstimatedSize (DWORD), располагающийся там же где (в CurrentVersion/Uninstall/MyProgramName).
Возникает вопрос: как его заполнить при установке ?

Вроде винда сама этим занимается, но если очень хочется то кто мешает записать при установке.

RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyProgramName_is1',
'EstimatedSize', 1);

Автор: Sig666
Дата сообщения: 21.02.2009 17:38
Можно и так:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProg_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: 16384



В идеале надо бы сделать проверку на привилегии, чтоб знать куда писать в hklm или hkcu
Автор: Mouzes
Дата сообщения: 21.02.2009 18:49
Парни, возник вопрос, страниц 20 я одолел темы, но вижу что после рабочей недели глаза побаливать начинают.

Делаю для локальной сети обновлённый клиент Стронг и мне нужно, чтобы все кто его устанавливал Стронг прописывался им в Автозагрузку.

Это секция помойму:

[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueName: "StrongDC client";

Но видимо где то ошибка или я вообще не так делаю?
Автор: gyra
Дата сообщения: 21.02.2009 19:08
Mouzes
Добавь еще ValueType: string
Автор: Mouzes
Дата сообщения: 21.02.2009 21:26
Если добавить, то вообще не компилится
Автор: gyra
Дата сообщения: 21.02.2009 21:43
Mouzes
Вот так попробуй
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: "StrongDC client"
Автор: Qarma
Дата сообщения: 21.02.2009 21:51
Хелп
как сделать запрос сд-кея при установке
чтобы он в реестр прописывался?????
чтобы игры, которые например просят ключ для сетевой игры, сразу его получали при установке

Добавлено:
Ну или так
сетап сам генерит кей из кейгена, запуская его на 1 секунду и сразу же прописывает этот кей в реестр
Автор: Unc1e
Дата сообщения: 21.02.2009 22:26
Mouzes

Код: [Registry]
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "StrongDC client"; ValueData: "{app}\MyProg.exe"; Flags: uninsdeletekey
Автор: Mouzes
Дата сообщения: 22.02.2009 07:24
Большое спасипки
Автор: LordVeider
Дата сообщения: 22.02.2009 07:42
kombat 77, Sig666
Ненене. Функциями IS я пользоваться умею. Мне нужно каким-то макаром вычислять при установке значение, которое нужно туда записывать.
Автор: Sig666
Дата сообщения: 22.02.2009 09:29
LordVeider

Попробуй это

[more=..]
function GetSpace(): integer;
var Space, LabelSpace: string;
StartLen, EndLen, SpaceLen: integer;
begin
Space:= SetupMessage(msgDiskSpaceMBLabel);
LabelSpace:= WizardForm.DiskSpaceLabel.Caption;
StartLen:= Pos('[mb]', Space);
SpaceLen:= Length(LabelSpace) - Length(Space) + 4;
Space:= Copy(LabelSpace, StartLen, SpaceLen);
StringChange(Space, ',', '.');
Result:= round(StrToFloat(Space))*1024;
end;

procedure WriteSizeInfo;
begin
if not RegWriteDWordValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting('AppName')}_is1', 'EstimatedSize', GetSpace) then
RegWriteDWordValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting('AppName')}_is1', 'EstimatedSize', GetSpace);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
WriteSizeInfo;
end;



[/more]

%)
Автор: Diawer
Дата сообщения: 22.02.2009 14:26
Может кто может доработать [more=код][Setup]
AppName=My Program
AppVerName=My Program 1.0
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[LangOptions]
DialogFontName=Tahoma

[Messages]
DiskSpaceMBLabel=Disk space required: [mb] MB

[Code]
const
NeedSize = 2100; //Размер устанавливаемого компонента

var
FreeSpaceLabel: TLabel;
FreeMB, TotalMB: cardinal;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: string;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, true, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Disk space available:' + ' ' + FloatToStr(round(FreeMB/1024*100)/100) + ' ' + 'GB'
else
FreeSpaceLabel.Caption := 'Disk space available:' + ' ' + IntToStr(FreeMB) + ' ' + 'MB'
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled := false;
end else
WizardForm.NextButton.Enabled := true;
end;
end;

procedure InitializeWizard();
begin
WizardForm.DiskSpaceLabel.Top := WizardForm.DiskSpaceLabel.Top - ScaleY(16);

FreeSpaceLabel := TLabel.Create(WizardForm);
FreeSpaceLabel.Left := WizardForm.DiskSpaceLabel.Left;
FreeSpaceLabel.Top := WizardForm.DiskSpaceLabel.Top + ScaleY(16);
FreeSpaceLabel.Parent := WizardForm.SelectDirPage;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled := False
end;
end;[/more] для отображения свободного места с блокировкой кнопки ‘Далее’, если места на диске не хватает.
Размер устанавливаемой программы, который сравнивается с размером свободного места пишется в коде в const NeedSize = 2100;, вот как бы сделать, что бы NeedSize = автоматом бралась из WizardForm.DiskSpaceLabel то есть где пишется размер в DiskSpaceMBLabel=.
Автор: Qarma
Дата сообщения: 22.02.2009 14:36
Diawer
Размещалось на предыдущих страницах мной
Автор: Artem_Butenko
Дата сообщения: 22.02.2009 18:58
Кто знает, что это за потаенная библиотека InnoExt.dll. Нашел ее в инсталляторе Legendary от 1С.
Автор: Don_Juan
Дата сообщения: 22.02.2009 19:19
Artem_Butenko

Таймер, выводящий и меняющий .jpg картинки.
Автор: Artem_Butenko
Дата сообщения: 22.02.2009 20:40
Don_Juan, наверно так, уже вспомнил, только слайд-шоу в этом инсталлере из *.bmp файлов.
Автор: Diawer
Дата сообщения: 23.02.2009 00:30
Qarma
Понятно, что ни че не понятно.
Вопрос в том, что бы NeedSize = ??? - бралась из DiskSpaceMBLabel автоматом.
Автор: skeptik_vdm
Дата сообщения: 23.02.2009 06:03
Diawer

Глянь может это!!!
[more=Код]
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Code]
var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';
end;

procedure InitializeWizard();
begin
NeedSize := 6300;

WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;
[/more]
Автор: Qarma
Дата сообщения: 23.02.2009 09:25

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

Добавлено:
Ну или так
сетап сам генерит кей из кейгена, запуская его на 1 секунду и сразу же прописывает этот кей в реестр

Кто нибудь поможет?
Автор: LordVeider
Дата сообщения: 23.02.2009 09:52
Qarma

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

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

1. Один раз сгенерить кейгеном ключ, скопировать.
2. Сделать чтобы IS писал его в реестр.
3. Не заниматься ерундой.
Автор: EagleSH
Дата сообщения: 23.02.2009 09:56
Qarma

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


весёлый парень

p.s. помню давным давно, делал другану инстал БФ2 для сетевой, так там как раз я сделал так, что при каждой установке - ключ совершенно разный писался. но средствами инно писать его из кейгена - забудь (у меня как раз именно так и делалось, при запуске инстала запускался кейген, вытаскивал я от туда ключ руками, преообразовывал в реестровый вид БФ-а и прописывал)

LordVeider
точно!
Автор: LordVeider
Дата сообщения: 23.02.2009 10:10
Sig666
Вариант, но...
Посчитать размер папки с помощью IS никак ?
Автор: Qarma
Дата сообщения: 23.02.2009 10:55
LordVeider

Цитата:
1. Один раз сгенерить кейгеном ключ, скопировать.
2. Сделать чтобы IS писал его в реестр.
3. Не заниматься ерундой.

Ну если один и тот же будет ключ у всех, кому я инсталлер давал, то как то не очень получается

Добавлено:
Помогите - как сделать чтобы на десктоп выводилось 2 ярлыка, под Dx9 и Dx10?
Автор: Sig666
Дата сообщения: 23.02.2009 11:57
LordVeider
В Corona Skin есть код, возвращающий объем директории.
Автор: LordVeider
Дата сообщения: 23.02.2009 13:55
Qarma

Цитата:
Ну если один и тот же будет ключ у всех, кому я инсталлер давал, то как то не очень получается
Утомили...
Код: [Code]
procedure RegisterApplication();
var
    s:array [1..5] of string;
begin
    s[1]:='ABCD-EFGH-IJK';
    s[2]:='ABCD-KLMN-FFF';
    s[3]:='ABCD-4566-XCZ';
    s[4]:='ABCD-5678-111';
    s[5]:='ABCD-9090-BBB';
    RegWriteStringValue(HKLM, 'SOFTWARE\MyProgram', 'Serial', s[random(5)]);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID=wpFinished
    then
    RegisterApplication;
end;    
Автор: Jetr0
Дата сообщения: 23.02.2009 16:01
Уже несколько раз писал. Вот закопипастю еще раз то-же что несколько страниц назад писал:

Есть софтина, при её установке создается ветвь реестра

Код: HKLM\SOFTWARE\programname\1

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


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