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

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

Автор: msatmb
Дата сообщения: 12.04.2009 23:33
ChVLпопробуй прописать Flags: uninsdeletekeyifempty. Если параметр не пустой, то он не удалится. Либо вообще убери все "Флаги", тоже не должно удаляться
Автор: ChVL
Дата сообщения: 13.04.2009 04:19
kombat 77
Ключ, созданный во время установки, но программа его удаляет после того, как уже запущена, причём, не в момент запуска её, а позже. IMHO, могут быть два решения: или сделать свойства ключа такими, чтобы программа не могла его удалить, или отрезать путь программе к нему.

msatmb
Это не деинсталляция, а нормальная работа программы.

P.S. Пишется загрузчик готовой программы.

Автор: Yoldosh
Дата сообщения: 13.04.2009 07:45
как вставить картинку в поле отмеченное красным
Автор: Serega0675
Дата сообщения: 13.04.2009 08:07
Yoldosh
я по началу подумал у меня дежавю...
Добавьте в процедуру:
procedure CurPageChanged(CurPageID: Integer);
begin
....................................................
if CurPageID = wpInstalling then
begin
BmpFile.Parent:= WizardForm.InstallingPage;
....................................................

Добавлено:
ChVL

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

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

Цитата:
или отрезать путь программе к нему
а как вы себе это представляете? Это нужно править саму программу... нет, можно конечно сделать ещё программу, которая через определённый промежуток времени будет проверять существование ключа в реестре и если его там нет, то записывать его, но по-моему это ерунда какая-то...
Автор: Yoldosh
Дата сообщения: 13.04.2009 08:52
некак не получается добавить

Цитата:
procedure CurPageChanged(CurPageID: Integer);
begin
....................................................
if CurPageID = wpInstalling then
begin
BmpFile.Parent:= WizardForm.InstallingPage;
....................................................
кагда смог добавить получаетсья вот так http://smages.com/2e/12/2e12238c3fe7cb00266959b208cfb219.jpg.htm вот сам код [more][Setup]
AppName=Vin Diesel Wheelman
AppVerName=Vin Diesel Wheelman
DefaultDirName={pf}\Vin Diesel Wheelman
OutputDir=E:\Proekt
WizardImageFile=E:\Logo\WizardImageFile.bmp
WizardSmallImageFile=E:\Logo\WizardSmallImageFile.bmp
DisableReadyPage=true
UninstallFilesDir={app}\Uninstall

[Languages]
Name: "ENG"; MessagesFile: "compiler:Default.isl"
Name: "RUS"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Soft\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: E:\3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: E:\1.bmp; Flags: dontcopy;

[Run]
Filename: {src}\DirectX\dxsetup.exe; Parameters: /silent; StatusMsg: ExpandConstant('{cm:UP}'); Check: DirectX

[CustomMessages]
ENG.PAGE_CAPTION=Setup has finished installing Vin Diesel Wheelman on your computer.
RUS.PAGE_CAPTION=Программа Vin Diesel Wheelman установлена на Ваш компютер.
ENG.STR=Click Finish to exit Setup.
RUS.STR=Нажмите «Завершить», чтобы выйти из программы установки.
ENG.BUT=Install
RUS.BUT=Установить
ENG.SPACE=Available place on disk:
RUS.SPACE=Доступно места на диске:
ENG.SPACE1=Place is Required on disk:
RUS.SPACE1=Требуется места на диске:
ENG.DRT=Will Update DirectX
RUS.DRT=Обновить DirectX
ENG.UP=Goes the renovation DirectX...
RUS.UP=Идет обновление DirectX...

Code
var
Upload: TCheckBox;
bottom_img:TBitmapImage;
lblCheckBox, lblSelectDir, lblSelectDirBrowse: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
WLabel1, WLabel2,
FLabel1, FLabel2, FLabel3: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
BmpFile: TBitmapImage;

function DirectX: Boolean;
begin
Result:=Upload.Checked;
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ 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 := ExpandConstant('{cm:SPACE1} ')+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ IntToStr(NeedSize)+ ' MB';
end;

// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
procedure lblCheckBoxOnClick(Sender: TObject);
begin
if Upload.Checked = False then
Upload.Checked:= True else
Upload.Checked:= False;
end;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('3.bmp');

NeedSize:= 7000;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Width:= ScaleX(497);
BmpFile.Height:= ScaleY(252);
BmpFile.Parent:= WizardForm.SelectDirPage;


bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
{первые 2 параметра - координаты левогого верхнего угла по горизонтали и вертикали, дальше ширина и высота,
до которой растянуть}
bottom_img.SetBounds(0, 315, 497, 48);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;

DirBrowseButton.Left:= DirBrowseButton.Left + ScaleX(40);
DirBrowseButton.Top:= DirBrowseButton.Top + ScaleY(12);
DirEdit.Left:= DirEdit.Left + ScaleX(40);
DirEdit.Top:= DirEdit.Top + ScaleY(12);

WizardBitmapImage.Width:= 497;
WizardBitmapImage.Height:= 314;
WizardBitmapImage2.Width:= 497;
WizardBitmapImage2.Height:= 314;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left:= Mainpanel.Left;
Top:= Mainpanel.Top;
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;

WLabel1:= TLabel.Create(WizardForm);
with WLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel1.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;

WLabel2:=TLabel.Create(WizardForm);
with WLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(234);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel2.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;

FLabel1:= TLabel.Create(WizardForm);
with FLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;

FLabel2:=TLabel.Create(WizardForm);
with FLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(53);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= ExpandConstant('{cm:PAGE_CAPTION}');
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;

FLabel3 :=TLabel.Create(WizardForm);
with FLabel3 do
begin
Top := ScaleY(110);
Left := ScaleX(176);
Width := ScaleX(301);
Height := ScaleY(53);
AutoSize := False;
WordWrap := True;
Font.Color:= clblack;
ShowAccelChar := False;
Caption := ExpandConstant('{cm:STR}');
Transparent := True;
Parent := WizardForm.FinishedPage;
end;

// уменьшил размер CheckBox'а, по другому никак
Upload:= TCheckBox.Create(WizardForm);
with Upload do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;

// создаём надпись для CheckBox'а
lblCheckBox:= TLabel.Create(WizardForm);
with lblCheckBox do
begin
Caption:= ExpandConstant('{cm:DRT}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @lblCheckBoxOnClick;
end;

// создаём lblSelectDir
lblSelectDir:= TLabel.Create(WizardForm);
with lblSelectDir do
begin
Caption:= WizardForm.SelectDirLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirLabel.Width;
Height:= WizardForm.SelectDirLabel.Height;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

// создаём lblSelectDirBrowse
lblSelectDirBrowse:= TLabel.Create(WizardForm);
with lblSelectDirBrowse do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirBrowseLabel.Width;
Height:= WizardForm.SelectDirBrowseLabel.Height;
WordWrap:= True;
Transparent:= True;
Parent:= WizardForm.SelectDirPage;
end;

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

FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(220);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

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

PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(10);
Top:= ScaleY(10);
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Font.Style:= [fsBold];
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(15);
Top:= ScaleY(25);
Width:= ScaleX(475);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
if CurPageID = wpSelectDir then
begin
WizardForm.NextButton.Caption:= ExpandConstant('{cm:BUT}');
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False;
with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(60);
InnerNotebook.Width := ScaleX(497);
InnerNotebook.Height := ScaleY(252)
end;
end;
if CurPageID = wpInstalling then
begin
with WizardForm do
begin
ProgressGauge.Left:= 20;
ProgressGauge.Top:= 160;
ProgressGauge.Width:= 215;
ProgressGauge.Height:= 20;
end;
end;
end;


[/more]
Автор: ChVL
Дата сообщения: 13.04.2009 09:50
Serega0675
Спасибо за участие. Мои рассуждения такие же, но, думаю, вдруг я что-то где-то не доглядел...
Править рабочую программу нельзя. Вот конкретная ситуация в деталях. Открыто окно программы, в это время ключ на месте. Нажимаем кнопку в этом окне - ключ тут же удаляется, и дальше программа не работает. Восстановить запись в реестре при запуске программы, понятно, нет проблем, а вот как перехватить команду на удаление ключа? Внешнее воздействие, приводящее к удалению ключа, - только нажатие кнопки в одном и том же окне.
Автор: Igrikxxx
Дата сообщения: 13.04.2009 10:23
Serega0675

Цитата:
Доработать скрипт увеличить до 640х480?

так вы так и запишите:

Цитата: procedure InitializeWizard();
begin
WizardForm.ClientWidth:= 640;
WizardForm.ClientHeight:= 480;

............................................
затем, меняйте координаты всех элементов... если не получится, то завтра (уже сегодня) сделаю.
Автор: Serega0675
Дата сообщения: 13.04.2009 12:18
ChVL
чёт прям варез какой-то...
Одним словом вы меня заинтриговали... Вот написал вам скрипт на Inno (чтоб было всё 'прозрачно' и не возникало лишних подозрений ). Скомпилированная программка (MyProgramRun.exe) выполняет функцию сторожа, т.е. раз в секунду проверяет наличие ключа в реестре и если его там не оказалось, то он его туда записывает.
Использование:
1. Копируете скомпилированную программку (MyProgramRun.exe) в один каталог с 'жертвой';
2. Запускаем MyProgramRun.exe, она сама запускает нашу 'жертву' и мониторит реестр...
Минусы:
- постоянно висит лишний процесс;
- кушает около 5 мегабайт оперативки...
[more=MyProgramRun]
Код: ; Для нормальной работы у Вас должен быть установлены InnoCompiler и ISCmplr от Restools http://restools.hanzify.org/
; InnoCompiler - в него входят файлы: Compil32.exe и Templates.dat - http://restools.hanzify.org/inno/InnoCompiler090319_English.zip
; Inno_ISCmplr - в него входят файлы, лучше из папки InnoSetup_FullVCL: setup.e32, ISCmplr.dls, ISCmplr.dll и SetupLdr.e32 - http://restools.hanzify.org/inno/Inno_ISCmplr_Setup090302.zip

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
VersionInfoDescription=My Program
VersionInfoVersion=1.5
AppPublisher=Serega_
CreateAppDir=no
OutputBaseFilename=MyProgramRun
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Code]
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL;
external 'ShowWindow@user32.dll stdcall delayload';

procedure tmr1Timer(Sender: TObject);
begin
if RegKeyExists(HKLM, 'SOFTWARE\My Program') = False then // проверка на присутствие ключа
// if RegValueExists(HKLM, 'SOFTWARE\My Program', 'version') then // проверка на присутствие значения в ключе
RegWriteStringValue (HKLM, 'SOFTWARE\My Program', 'version', '1.5');
end;

function InitializeSetup(): Boolean;
var
res: Integer;
s, p: string;
tmr1: TTimer;

begin
ShowWindow(Application.Handle, SW_Hide); // скрываем окно нашей программки 'MyProgramRun' на панели задач
// создаём таймер для проверки реестра
tmr1:= TTimer.Create(Application);
with tmr1 do begin
Enabled := True; // включаем таймер
Interval:= 1000; // интервал времени, через которое он будет срабатывать, в данном случае 1 сек.
OnTimer:= @tmr1Timer;
end;
// запускаем нашу жертву
s:= ExpandConstant('{src}\MyProg.exe'); // имя жертвы
p:= ''; // ключи запуска жертвы, если нужны
Exec(s, p, '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;

Автор: AleSasha
Дата сообщения: 13.04.2009 12:42
Подскажите, пожалуйста, как убрать верхнюю синюю полоску окна инсталятора (TitleBar)?

Спасибо всем!
Автор: Lana4ka
Дата сообщения: 13.04.2009 12:54
Граждане программисты, выручайте!!
Нужно в файл .ini записать basedir="путь установки/" (с кавычками и таким слешем)...
Создаю директорию:
[Ini]
Filename:"{app}\my.ini"; Section:"mysqld"; Key:"basedir"; String:"{app}"
И получаю нужный путь...НО! Слеши не те и кавычек нет, а это обязательное условие...
Подскажите, как сделать кавычки и слеши поменять...вариант "ручками" не устраивает ))))
Автор: chelobey
Дата сообщения: 13.04.2009 14:16
И почему никто не поможет с этим?
Автор: Serega0675
Дата сообщения: 13.04.2009 15:34
Lana4ka
[more=так]
Код: [Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
s: string;
begin
s:= ExpandConstant('{app}');
StringChange(s, '\', '/'); // производим замену всех встречающихся '\' на '/'
If CurStep = ssDone then
SetIniString('mysqld', 'basedir', AddQuotes(s), ExpandConstant('{app}\my.ini'));
end;
// т.к. my.ini при деинсталляции не удаляется, то удаляем его сами
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{app}\my.ini'));
end;

Автор: ChVL
Дата сообщения: 13.04.2009 15:35
Serega0675
Дык, я так и делал, с небольшими изменениями: для простоты без проверки наличия тупо периодически записывал ключ. Задержка между записью плавно возрастала и процесс оканчивался приблизительно через минуту. Этого времени хватало для любого пользователя программой. Тем не менее это слишком "левый" приём, хотелось бы найти прямое грамотное решение. Самый красивый вариант - не дать возможность программе сбросить ключ. Идеи ещё не исчерпаны, буду искать...
Автор: Serega0675
Дата сообщения: 13.04.2009 16:02
ChVL

Цитата:
Самый красивый вариант - не дать возможность программе сбросить ключ

каким образом? Изменить можно любой ключ... т.е. я вам и написал своего рода сторожа... Точно так же работает Lavasoft Ad-Aware, т.е. мониторит системные ключи и в случае изменения выдаёт пользователю диалог с вопросом: ‘разрешить или нет изменение реестра’. Если пользователь запрещает изменение, то он восстанавливает старый ключ, т.е. перезаписывает его...

Добавлено:
ChVL
Цитата:
Идеи ещё не исчерпаны, буду искать...
если найдёте решение, то скажите... Просто мне самому интересно.
Автор: DeKaNszn
Дата сообщения: 13.04.2009 16:55
ChVL


Цитата:
Самый красивый вариант - не дать возможность программе сбросить ключ. Идеи ещё не исчерпаны, буду искать...


Можно изменить права пользователя на доступ к определенной ветви реестра
а вот как сделать - подсказать не смогу
Автор: kombat 77
Дата сообщения: 13.04.2009 17:56
AleSasha

Цитата:
Подскажите, пожалуйста, как убрать верхнюю синюю полоску окна инсталятора (TitleBar)?

Плохо будет форме без бордюра(таскать по десктопу нельзя к примеру будет, это свойство придётся добавлять для самОй формы(у WizardForm нет свойства OnMouseDown), но если всёж надо, то так WizardForm.BorderStyle := bsNone;
Автор: ChVL
Дата сообщения: 13.04.2009 18:55
DeKaNszn
В Inno это параметр Permissions - задаёт дополнительные разрешения в ключах для пользователей или групп пользователей. Однако в данном случае он проблему не решает, т.к. запретить доступ к ключу надо не пользователю(ям), а программе.
Автор: AleSasha
Дата сообщения: 13.04.2009 19:07

Цитата:
WizardForm.BorderStyle := bsNone;


Спасибо Kombat 77!

Это работает, но меняет цвет шрифта РТФ...
Автор: Yoldosh
Дата сообщения: 13.04.2009 19:15
можете помочь чтоби в поле отмеченное красним била видна картинка
Автор: kombat 77
Дата сообщения: 13.04.2009 19:42
AleSasha

Цитата:
меняет цвет шрифта РТФ...


Подгружай из временной папки RTF, мой предыдущий пример был с ошибкой, [more=вот]

[Setup]
AppName=My Program
AppVerName=My Program v 1.0
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
LicenseFile=Inno Setup License.rtf
OutputDir=userdocs:

[Files]
Source: "Inno Setup License.rtf"; Flags: dontcopy;

[Code]

procedure InitializeWizard();
var
RStr: String;
begin
WizardForm.Position := poScreenCenter;
WizardForm.BorderStyle := bsNone;
WizardForm.Font.Color := clRed;

WizardForm.WelcomePage.Color := clBlue;
WizardForm.InnerPage.Color := clBlue;
WizardForm.LicenseMemo.Color := clBlue;
ExtractTemporaryFile('Inno Setup License.rtf');
LoadStringFromFile(ExpandConstant('{tmp}\Inno Setup License.rtf'), RStr);
WizardForm.LicenseMemo.RTFText := RStr;
end;

[/more] вполне рабочий.
Автор: SiberianGRemlin
Дата сообщения: 13.04.2009 21:15
Здравствуйте!
У меня такой вопрос. Во время работы процедуры как обновлять окно (форму), чтобы её можно было таскать? Т.е. она была активная, а не просто замирала, отображая что-то и обновляясь в процессе, если использовать метод Refresh между итерациями. Трюк из Delphi с Application.ProcessMessages в InnoSetup не поддерживается (либо вызывается иначе). Кстати, у этого варианта есть свой недостаток -- во время перетаскивания окна процесс останавливается, пока не отпустишь окно. Какие ещё есть способы, кроме как создавать два потока и в одном делать работу, а во втором постоянно обновлять окно? (как я понимаю, потоки в IS не поддерживаются).
Т.е. цель -- добиться активности окна как во время извлечения файлов, но во время работы своей процедуры. Возможно ли это вообще?
Автор: DeKaNszn
Дата сообщения: 13.04.2009 21:46
ChVL


Цитата:
В Inno это параметр Permissions - задаёт дополнительные разрешения в ключах для пользователей или групп пользователей. Однако в данном случае он проблему не решает, т.к. запретить доступ к ключу надо не пользователю(ям), а программе.


программа получает права пользователя, под которым она запущена
особенно хорошо это заметно в висте (многие программы надо запускать от имени администратора)

Поставь доступ к ключу реестра только для system
Автор: Qarma
Дата сообщения: 14.04.2009 01:07

Цитата:
Don_Juan
Пробуй


Посмотрел тут прошлые страницы и нашёл это.... http://forum.ru-board.com/topic.cgi?forum=5&topic=29117&start=1060#20
Но сразу же нашёл в этом скрипте баг - когда пакуешь большие репаки гигов по 15....25....с этим лого, то в начале установки инсталятор просто виснет на месте отожрав 100мб оперативной памяти
Может кто решение найдёт?
Автор: Lana4ka
Дата сообщения: 14.04.2009 04:09
Serega0675,
Спасибо большое, это именно то!
Автор: ChVL
Дата сообщения: 14.04.2009 04:12
DeKaNszn
У программы, видимо, своя теория и она упорно не подчиняется нашей. Перепробованы все мыслимые варианты - от каждого разрешения в отдельности до всех вместе.
Автор: DeKaNszn
Дата сообщения: 14.04.2009 06:11
ChVL
так ставил?


Код: [no]Permissions: authusers-none, admins-none, system-Read[/no]
Автор: Yoldosh
Дата сообщения: 14.04.2009 06:56
можете помочь чтоби в поле отмеченное красним била видна картинка вот код [more][Setup]
AppName=Vin Diesel Wheelman
AppVerName=Vin Diesel Wheelman
DefaultDirName={pf}\Vin Diesel Wheelman
OutputDir=E:\Proekt
WizardImageFile=E:\Logo\WizardImageFile.bmp
WizardSmallImageFile=E:\Logo\WizardSmallImageFile.bmp
DisableReadyPage=true
UninstallFilesDir={app}\Uninstall

[Languages]
Name: "ENG"; MessagesFile: "compiler:Default.isl"
Name: "RUS"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Soft\VCRedist\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: E:\3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: E:\1.bmp; Flags: dontcopy;

[Run]
Filename: {src}\DirectX\dxsetup.exe; Parameters: /silent; StatusMsg: ExpandConstant('{cm:UP}'); Check: DirectX

[CustomMessages]
ENG.PAGE_CAPTION=Setup has finished installing Vin Diesel Wheelman on your computer.
RUS.PAGE_CAPTION=Программа Vin Diesel Wheelman установлена на Ваш компютер.
ENG.STR=Click Finish to exit Setup.
RUS.STR=Нажмите «Завершить», чтобы выйти из программы установки.
ENG.BUT=Install
RUS.BUT=Установить
ENG.SPACE=Available place on disk:
RUS.SPACE=Доступно места на диске:
ENG.SPACE1=Place is Required on disk:
RUS.SPACE1=Требуется места на диске:
ENG.DRT=Will Update DirectX
RUS.DRT=Обновить DirectX
ENG.UP=Goes the renovation DirectX...
RUS.UP=Идет обновление DirectX...
ENG.GB=GB
RUS.GB=Гб

Code
var
Upload: TCheckBox;
bottom_img:TBitmapImage;
lblCheckBox, lblSelectDir, lblSelectDirBrowse: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
WLabel1, WLabel2,
FLabel1, FLabel2, FLabel3: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
BmpFile: TBitmapImage;

function DirectX: Boolean;
begin
Result:=Upload.Checked;
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ExpandConstant(' {cm:GB}') else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ 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 := ExpandConstant('{cm:SPACE1} ')+ FloatToStr(round(NeedSize/1024*100)/100) + ExpandConstant(' {cm:GB}') else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ IntToStr(NeedSize)+ ' MB';
end;

// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox
procedure lblCheckBoxOnClick(Sender: TObject);
begin
if Upload.Checked = False then
Upload.Checked:= True else
Upload.Checked:= False;
end;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('3.bmp');

NeedSize:= 7000;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Width:= ScaleX(497);
BmpFile.Height:= ScaleY(252);
BmpFile.Parent:= WizardForm.SelectDirPage;


bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
{первые 2 параметра - координаты левогого верхнего угла по горизонтали и вертикали, дальше ширина и высота,
до которой растянуть}
bottom_img.SetBounds(0, 315, 497, 48);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;

DirBrowseButton.Left:= DirBrowseButton.Left + ScaleX(40);
DirBrowseButton.Top:= DirBrowseButton.Top + ScaleY(12);
DirEdit.Left:= DirEdit.Left + ScaleX(40);
DirEdit.Top:= DirEdit.Top + ScaleY(12);

WizardBitmapImage.Width:= 497;
WizardBitmapImage.Height:= 314;
WizardBitmapImage2.Width:= 497;
WizardBitmapImage2.Height:= 314;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left:= Mainpanel.Left;
Top:= Mainpanel.Top;
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;

WLabel1:= TLabel.Create(WizardForm);
with WLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel1.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;

WLabel2:=TLabel.Create(WizardForm);
with WLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(234);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= WizardForm.WelcomeLabel2.Caption;
Transparent:= True;
Parent:= WizardForm.WelcomePage;
end;

FLabel1:= TLabel.Create(WizardForm);
with FLabel1 do
begin
Left:= ScaleX(176);
Top:= ScaleY(16);
Width:= ScaleX(301);
Height:= ScaleY(54);
AutoSize:= False;
WordWrap:= True;
Font.Size:= 12;
Font.Style:= [fsBold];
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;

FLabel2:=TLabel.Create(WizardForm);
with FLabel2 do
begin
Top:= ScaleY(76);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(53);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
ShowAccelChar:= False;
Caption:= ExpandConstant('{cm:PAGE_CAPTION}');
Transparent:= True;
Parent:= WizardForm.FinishedPage;
end;

FLabel3 :=TLabel.Create(WizardForm);
with FLabel3 do
begin
Top := ScaleY(110);
Left := ScaleX(176);
Width := ScaleX(301);
Height := ScaleY(53);
AutoSize := False;
WordWrap := True;
Font.Color:= clblack;
ShowAccelChar := False;
Caption := ExpandConstant('{cm:STR}');
Transparent := True;
Parent := WizardForm.FinishedPage;
end;

// уменьшил размер CheckBox'а, по другому никак
Upload:= TCheckBox.Create(WizardForm);
with Upload do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
end;

// создаём надпись для CheckBox'а
lblCheckBox:= TLabel.Create(WizardForm);
with lblCheckBox do
begin
Caption:= ExpandConstant('{cm:DRT}');
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @lblCheckBoxOnClick;
end;

// создаём lblSelectDir
lblSelectDir:= TLabel.Create(WizardForm);
with lblSelectDir do
begin
Caption:= WizardForm.SelectDirLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirLabel.Width;
Height:= WizardForm.SelectDirLabel.Height;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

// создаём lblSelectDirBrowse
lblSelectDirBrowse:= TLabel.Create(WizardForm);
with lblSelectDirBrowse do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(40);
Top:= WizardForm.SelectDirBrowseLabel.Top + ScaleY(12);
Width:= WizardForm.SelectDirBrowseLabel.Width;
Height:= WizardForm.SelectDirBrowseLabel.Height;
WordWrap:= True;
Transparent:= True;
Parent:= WizardForm.SelectDirPage;
end;

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

FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= ScaleY(220);
Width:= ScaleX(209);
Height:= ScaleY(13);
Transparent:= True;
end;

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

PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(10);
Top:= ScaleY(10);
Width:= ScaleX(300);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Font.Style:= [fsBold];
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(15);
Top:= ScaleY(25);
Width:= ScaleX(475);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Color:= clblack;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
if CurPageID = wpSelectDir then
begin
WizardForm.NextButton.Caption:= ExpandConstant('{cm:BUT}');
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False;
with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(60);
InnerNotebook.Width := ScaleX(497);
InnerNotebook.Height := ScaleY(252)
end;
end;
if CurPageID = wpInstalling then
begin
with WizardForm do
begin
BmpFile.Parent:= WizardForm.InstallingPage;
ProgressGauge.Left:= 20;
ProgressGauge.Top:= 160;
ProgressGauge.Width:= 215;
ProgressGauge.Height:= 20;
end;
end;
end;[/more]
Автор: DeKaNszn
Дата сообщения: 14.04.2009 08:19
Qarma

так:

Код: [no][Files]
Source:"logo.bmp";DestDir:{tmp};Flags: dontcopy nocompression[/no]
Автор: skeptik_vdm
Дата сообщения: 14.04.2009 10:25
Qarma
У меня с этим скриптом все нормально, делал репаки нормально!
P.S.: этот скрипт за авторством ЗлогоДеда!!!!
Автор: Igrikxxx
Дата сообщения: 14.04.2009 12:33

Цитата:
затем, меняйте координаты всех элементов... если не получится, то завтра (уже сегодня) сделаю.


Serega0675

Да немог бы ты выложить? а то я уже незнаю что тама делать, заранее спасибо!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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