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

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

Автор: innonewbie
Дата сообщения: 19.08.2012 13:15
Nuclear_glare
[more=такой вариант][Files]
Source: image1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak deleteafterinstall

[code]
var
MyPanel, MyPanel2: TPanel;
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;

procedure InitializeWizard();
begin
ExtractTemporaryFile('image1.bmp');
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\image1.bmp'));

begin
MyPanel := TPanel.Create(WizardForm);
with MyPanel do
begin
Align := alClient;
Parent := WizardForm;
end;

begin
MyPanel2 := TPanel.Create(WizardForm);
with MyPanel2 do
begin
Align := alClient;
Parent := WizardForm;
end;

with WizardForm.WizardBitmapImage do
begin
Align := alClient;
Parent := MyPanel;
end;

with WizardForm.WizardBitmapImage2 do
begin
Align := alClient;
Parent := MyPanel2;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
WelcomeLabel1.Font:= WizardForm.WelcomeLabel1.Font
WelcomeLabel1.Font.Color:= clWhite;
WelcomeLabel1.Transparent:= True;
WelcomeLabel1.WordWrap:= true;
WelcomeLabel1.Caption:= WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent:= MyPanel;

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
WelcomeLabel2.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= MyPanel;

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= MyPanel2;

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= MyPanel2;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;

WizardForm.NextButton.BringToFront;
WizardForm.CancelButton.BringToFront;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
MyPanel.Hide;
if CurPageID = wpWelcome then
MyPanel.Show;
MyPanel2.Hide;
if CurPageID = wpfinished then
MyPanel2.Show;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
end;
[/more]

MogilShik2007
[more=вот][CustomMessages]
DeleteSave=Удалить сохраненные игры и настройки?

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then /
if DirExists(ExpandConstant('{userdocs}')+'\11111') then
if MsgBox(ExpandConstant('{cm:DeleteSave}'), mbInformation, MB_YESNO) = idYes then
DelTree(ExpandConstant('{userdocs}')+'\11111', True, True, True);
end;[/more]. Нужные пути сам пропишешь.
Автор: MOD_TEC
Дата сообщения: 19.08.2012 13:54
Как можно сделать так чтобы только за определенное место можно было таскать инсталлятор а не за всю форму...
Автор: Nuclear_glare
Дата сообщения: 19.08.2012 15:34
innonewbie
Спасибо вам нереальное))), всё получилось. Только теперь вокруг кнопок появился белый контур:
http://i43.fastpic.ru/big/2012/0819/fd/0f904dfcc21145ba94bbdfadc59f65fd.jpg
Можно ли с этим что-нибудь поделать?
Автор: Mailchik
Дата сообщения: 19.08.2012 16:25
Nuclear_glare
Wizardform.NextButton.Refresh();
Wizardform.CancelButton.Refresh();
Автор: Nuclear_glare
Дата сообщения: 19.08.2012 21:42
Mailchik
Объясните пожалуйста, а куда этот код вставлять-то? В несколько мест пробовал, не работает.
Автор: Nasgul1987
Дата сообщения: 20.08.2012 00:06
Nuclear_glare
это не контур это WizardForm
выставь ему тоже жёлтый цвет
WizardForm.Color := твой цвет;
Автор: Nuclear_glare
Дата сообщения: 20.08.2012 10:35
Nasgul1987
Желтый цвет просто так поставил, потом там будет не однотонный цвет а изображение, в этом и проблема.

P.S. Извините если я уже заколебал тут всех со своими вопросами, но просто спрашивать больше негде.
Автор: MOD_TEC
Дата сообщения: 20.08.2012 10:40
Как в IsDone срипте прописать чтобы вместо времени до окончания установки на панели задач просто было написано установка...
Автор: MogilShik2007
Дата сообщения: 20.08.2012 12:21
innonewbie спасибо.

И еще выложите скрипт двойного прогресс бара, нашел один, но чет смущает пункт SizeInfo.ini - чего это такое и окуда ее брать?

И такой вопрос на больших файлах пропадает моя иконка инсталлятора, это как то можно исправить?

Эээ, после запуска игры появляются такие значения в реестре:
Root: HKLM; Subkey: "SOFTWARE\Classes\CLSID\{EE4DEA71-3E59-432B-AF58-2B13E53D4F90}";
Root: HKLM; Subkey: "SOFTWARE\Classes\Record\{05266000-5465-3AA0-90F4-6FDD962F7F95}";

Как их удалять?
Автор: Tapas77789
Дата сообщения: 20.08.2012 13:41

Цитата:

MOD_TEC
Как в IsDone срипте прописать чтобы вместо времени до окончания установки на панели задач просто было написано установка...


ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback)

ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, 0, {#NeedMem}, @ProgressCallback)
Автор: MOD_TEC
Дата сообщения: 20.08.2012 14:16
Tapas77789 Спасибо работает...
А как сделать чтобы вконце было написано "Завершение"

Добавлено:
Как добавить в инсталлятор свой шрифт можно пример....
Автор: Tapas77789
Дата сообщения: 20.08.2012 20:59
MOD_TEC
[more=А как сделать чтобы вконце было написано "Завершение"]

#define MyAppName "test"
#define MyAppVersion "1.0"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
OutputBaseFilename=setup

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[_code]
type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif

function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
SetTaskBarTitle('Завершение');
end;
[/more]
Автор: Nuclear_glare
Дата сообщения: 20.08.2012 21:31
Nasgul1987
Так можно что-нибудь с этим белым WizardForm сделать?
Автор: MOD_TEC
Дата сообщения: 20.08.2012 21:39
Tapas77789
Большое спасибо...
Автор: MOD_TEC
Дата сообщения: 21.08.2012 15:52
Как добавить проценты удаления на деинсталлятор...Подскажите пожалуйста...
Автор: Nuclear_glare
Дата сообщения: 22.08.2012 10:56

Цитата:
Как добавить в инсталлятор свой шрифт можно пример....

Поиском не пробовали пользоваться? Говорят, отличная вещь! http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=5264&limit=1&m=1#1
Автор: Tapas77789
Дата сообщения: 22.08.2012 11:25
MOD_TEC

Цитата:
Как добавить проценты удаления на деинсталлятор...Подскажите пожалуйста...

Скрин Можно как оно должно виглядеть?

Автор: MOD_TEC
Дата сообщения: 22.08.2012 12:26
Tapas77789
так http://forum.oszone.net/attachment.php?attachmentid=86554&d=1345575893
http://forum.oszone.net/attachment.php?attachmentid=86575&d=1345628460
Автор: murom3
Дата сообщения: 22.08.2012 12:57
Как сделать чтобы при установке прописывался путь к папке с программой в файл .ini с настройками
Автор: Mailchik
Дата сообщения: 22.08.2012 14:38
murom3
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
SetIniString('Settings', 'Path', ExpandConstant('{app}'), ExpandConstant('{app}\setting.ini'))
end;
Автор: Tapas77789
Дата сообщения: 22.08.2012 18:57
MOD_TEC
[more=TEST]
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName=D:\MyApp
UninstallFilesDir={app}\uninsfiles

[Dirs]
Name: {app}\uninsfiles;

[Files]
Source: compiler:Dll Pack\CallbackCtrl.dll; DestDir: {app}\uninsfiles; Flags: ignoreversion
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[_code]
type
Un_TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);

var
PercentsTimer: LongWord;
PercentsLabel: TLabel;

function Un_WrapTimerProc(callback: Un_TTimerProc; Paramcount: Integer): longword; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';
function Un_SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32.dll stdcall delayload';
function Un_KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall delayload';

Function Un_NumToStr(Float: Extended): String;
Begin
Result:= Format('%.1n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
End;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\uninsfiles\callbackctrl.dll'), ExpandConstant('{tmp}\callbackctrl.dll'), False);
Result:= True;
end;

Procedure PercentsProc(h, msg, idevent, dwTime: Longword);
Begin
with UninstallProgressForm.ProgressBar do
begin
PercentsLabel.Caption:= 'Прогресс: ' + Un_NumToStr((Position * 100)/Max) + '.' + Chr(48 + Position mod 10) + ' %';
end;
End;

procedure CurUninstallStepChanged(CurStep: TUninstallStep);
begin
if (CurStep=usUninstall) then
begin
PercentsTimer:= Un_SetTimer(0, 0, 100, Un_WrapTimerProc(@PercentsProc, 4));
end;
if (CurStep=usPostUninstall) then
begin
Un_KillTimer(0, PercentsTimer);
end;
end;

procedure InitializeUninstallProgressForm();
begin
PercentsLabel:= TLabel.Create(UninstallProgressForm);
with PercentsLabel do
begin
Left:= UninstallProgressForm.ProgressBar.Left;
Top:= UninstallProgressForm.ProgressBar.Top + UninstallProgressForm.ProgressBar.Height + ScaleY(10);
Width:= ScaleX(100);
Height:= ScaleY(15);
AutoSize:= False;
Transparent := True;
Parent:= UninstallProgressForm.ProgressBar.Parent;
end;
end;[/more]
Автор: MOD_TEC
Дата сообщения: 22.08.2012 19:29
Tapas77789
Спасибо...
Автор: Pantalone
Дата сообщения: 22.08.2012 20:19
Ребят, по какой причине Inno не хочет заменять файл в папке system32 винды XP?
Дата создания и изменения нового файла больше старого, версия тоже больше, старый 6.0.72.9589, новая 6.1.0.9744
Пытаюсь установить с такими параметрами:

PrivilegesRequired=poweruser
Source: "В:\dll\expsrv.dll"; DestDir: "{sys}"; Flags: restartreplace uninsnosharedfileprompt

Происходит установка, проверяю файл, а он старый. Система не ругается, что пытаются заменить файл. Но если вручную удалить этот файл из системы (при этом ругается) и запустить установку, то новый файл появляется на нужном месте.
Что это может быть за проблема такая, поделитесь соображениями.
Автор: Tapas77789
Дата сообщения: 22.08.2012 20:54
PrivilegesRequired=poweruser
Source: "В:\dll\expsrv.dll"; DestDir: "{sys}"; Flags: ignoreversion restartreplace uninsnosharedfileprompt

Pantalone
попробуй убить explorer "TaskKill /f /im explorer.exe"

TaskKill /f /fi "Status ne RUNNING" /im drvspace.exe
Автор: Pantalone
Дата сообщения: 22.08.2012 21:00
Tapas77789
Не помогает, уже пробовал, файл не заменяется. Пробовал confirmoverwrite, запроса на перезапись не появляется. Ради интереса попробовал regserver, хотя файл это не поддерживает, но установка ругнулась, что не может его зарегать. Какая-то ерунда короче, файл не заменяется, но при попытке его зарегать вылезает ошибка, значит все-таки доступ к старому файлу есть, но менять его не хочет.
Автор: Genri
Дата сообщения: 23.08.2012 15:16
Pantalone

Цитата:
Inno не хочет заменять файл в папке system32 винды XP
-- попробуй флаг allowunsafefiles

Автор: Pantalone
Дата сообщения: 23.08.2012 19:31
Не помогает. Может вообще нельзя файлы заменять в папке system32?

Добавлено:

Цитата:
попробуй убить explorer "TaskKill /f /im explorer.exe"

TaskKill /f /fi "Status ne RUNNING" /im drvspace.exe


А вот это я не понял. Зачем?
Автор: tuz1979
Дата сообщения: 24.08.2012 03:38
Привет всем!у меня такой вопрос,как сделать чтоб установка шла по умолчанию в C:\Windows\System32?
ЗАРАНЕЕ СПАСИБО.
Автор: Kindly
Дата сообщения: 24.08.2012 09:27

Цитата:
как сделать чтоб установка шла по умолчанию в C:\Windows\System32?
ЗАРАНЕЕ СПАСИБО.
научится наконец читать справку.
Автор: Genri
Дата сообщения: 24.08.2012 11:37
Pantalone

Цитата:
PrivilegesRequired=poweruser
Source: "В:\dll\expsrv.dll"; DestDir: "{sys}"; Flags: restartreplace uninsnosharedfileprompt
-- и все-таки:
1. используй флаг allowunsafefiles. Только с этим флагом можно заменить "Any DLL file from own Windows System directory"
2. ты используешь так же флаг restartreplace. Соответственно, файл будет обновлен не сразу после завершения инсталляции, а "This flag tells Setup to instead register the file to be replaced the next time the system is restarted"
3. у тебя выставлен параметр PrivilegesRequired=poweruser. Но при использовании restartreplace следует учитывать "NOTE: This flag has no effect on Windows NT platforms if the user does not have administrative privileges. Therefore, when using this flag, it is recommended that you leave the PrivilegesRequired [Setup] section directive at the default setting of admin."

Т.е. при условии, что PrivilegesRequired=admin и при использовании флагов allowunsafefiles и restartreplace, файл будет заменен, но только после перезагрузки системы.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

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


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