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

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

Автор: The_Club
Дата сообщения: 01.03.2008 10:44
elapse

Разобрался. Благодарю за сотрудничество!
Автор: naben
Дата сообщения: 01.03.2008 12:15
Подскажите плиз,как значения в реестре, которые инсталлятор поменяет в процессе инсталла на другие значения, после анинсталла программы вернуть на место?
Автор: RazdorX
Дата сообщения: 01.03.2008 12:29
У меня такая проблема. Нужно, чтобы установщик проверял значения параметра реестра и при отсутствии определенного значения выдавал сообщение.
Тоесть чтобы при запуске установки мода установщик лез в ключ (например) HKEY_LOCAL_MACHINE\SOFTWARE\myprog\1.0, смотрел значение dword-параметра и, если значение не 31665, выдавал сообщение "У вас не подходящая версия программа. Обновите ее."
Кстати какое значение dword параметра нужно указывать установщику - шестнадцатиричное или десятичное?
Автор: serg_aka_lain
Дата сообщения: 01.03.2008 15:57
RazdorX

function InitializeSetup(): Boolean;
var version : cardinal;
//PatchVersion = dword-параметр

begin
Result:= True;
RegQueryDWordValue(HKLM, 'SOFTWARE\myprog\1.0', 'PatchVersion', version)
if version < 31665 then
begin
MsgBox('У вас не подходящая версия программа. Обновите ее.' #13#10 , mbInformation, mb_Ok);
Result:= False;
end
end;


Цитата:
какое значение dword параметра нужно указывать установщику - шестнадцатиричное или десятичное?


Удобнее ИМХО десятичное 31665 , но можно и шестнадцатиричное $7bb1

Автор: RazdorX
Дата сообщения: 01.03.2008 16:20
serg_aka_lain, спасибо я уже сам написал подобное но не компилило. Благодаря тебе я понял почему
Вот тут if version < 31665 then я значение (которое 31665) зачем то поставил в одинарные кавычки.
Кстати ты видимо подумал, что 31665 - это версия, но это просто значение, выбранное по непонятному мне принципу. Версий программы всего 2 и подходит только вторая. Так что тут нужно "не равно" (<>). Спасибо за помощь.
И еще, шестнадцатиричное значение установщик кушать отказался. Упорно реагирует только на десятичное.
Автор: elapse
Дата сообщения: 01.03.2008 17:06
naben, могу предложить такой вариант от Genri.
Автор: naben
Дата сообщения: 01.03.2008 19:32
elapse
Большое спасибо!!! Это то, что надо! Жаль инсталлятором такое не предусмотрено.

Добавлено:
А вот ещё последний вопросик:
Када записываешь значение командой RegWriteStringValue, то мы получаем строковый параметр в реестре, а какой командой получить, допустим, расширяемый строковый параметр?
Ещё добавлено:
Спасибо, уже нашёл функцию RegWriteExpandStringValue, не указанную в моей старой справке.
Автор: Victor_Dobrov
Дата сообщения: 02.03.2008 16:49
Corona Skin & Check System Requirements (400 Кб в архиве) - исправление ошибок скина-дополнения.

Благодаря elapse пофиксен баг, который блокировал чекбокс принятия Лицензии.
Замечу, что строка #expr AddLocale(...) нужна, даже если в инсталляторе только один язык.
Параметры LicenseFile, InfoBefore, InfoAfter проще указывать там же, а не в [Setup].
Ещё скрипт устанавливает: ShowLanguageDialog=auto, UninstallDisplayIcon={uninstallexe}
Автор: argnistkroleg
Дата сообщения: 02.03.2008 18:53
1.)Не могу понять, что в двух строчках неправильного...
WizardForm.NOICONSCHECK.Color := clRed;
WizardForm.NOICONSCHECK.font.Color := $ffffff;
Первая строка нормально подменяет фон надписи "Не создавать папку в меня "Пуск" " на нужный, а вторая ничего не делает, т.е. текст надписи остается черным по умолчанию.

2.) Кто может, дайте пример куска кода для простого наложения текстуры на кнопку, напрмиер на Cancel
Ну а если это совсем не трудно, то и на Next, Back, Browse (SelectDir), Browse (Select Group)
Автор: naben
Дата сообщения: 02.03.2008 19:10
Подскажите пожалуйста, как зашифровать инсталлятор от Inno Setup Unpacker как это сделано, допустим, в наборе кодеков klmcodec170.exe? Почитал, что подобная фича есть в Corona Skin & Check System Requirements и называется AutoPass, но в этой программе без 100 грамм не разберёшься, если кто знает, подскажите наиболее простой метод?
Автор: elapse
Дата сообщения: 02.03.2008 19:16
argnistkroleg, вышеприведённый код работает... но только при условии, что выбран классический стиль оформления Винды. При стандартном менять цвет текста для чекбоксов не получится.
По второму ворпросу смотреть руководство Kindly.

Добавлено:
naben, см. опять же вышеуказанное руководство. По Вашему вопросу там есть пара простых, но не менее (почти) действенных примеров.
Автор: naben
Дата сообщения: 02.03.2008 19:37
elapse
Спасибо, нашёл в Руководство по расширенным возможностям Inno Setup 5 (не для чайников) от Kindly то, что надо и ещё много чего полезного!
Автор: Lier
Дата сообщения: 02.03.2008 20:34
Скажите, а русификатор к версии 5.2.2 планируется ?
От 5.2.0 не устанавлмвается из-за несоответствия CRC...
Автор: elapse
Дата сообщения: 02.03.2008 20:51
Lier, гугль рулит.
Автор: argnistkroleg
Дата сообщения: 02.03.2008 22:26
elapse
Премного тебе благодарен! Ты гуру инно.

Осталось только в коде надыбать запись для изменения цвета текста кнопки по клику...

В идеале хочется при нажатии клавишей мыши по кнопке видеть не белый голый прямоугольник, а текстуру, что была до нажатия здесь, и надпись чтоб поменяла цвет...


А так же возникли такие проблемы:

Автор: elapse
Дата сообщения: 03.03.2008 00:10
argnistkroleg, Font.Color кнопок в [no]
Код: [/no] не поменять, ИМХО, легче дорисовать ещё одно состояние кнопки. Как раз в этом заключается решение первой проблемы - посмотри, как сделан образец button.bmp в руководстве. Что-то мне подсказывает, что текстура у тебя состоит из одной кнопки. Поэтому при нажатии имеем:

Цитата:
белый голый прямоугольник

Возможно, ошибаюсь.
По второму вопросу: если пример из руководства и без изменений, то находишь строку:
Labl:=TLabel.Create(WizardForm)
и до строки Labl.Tag:=AButtonIndex заменяешь всё на:
[code]
Labl.Top := 5
Labl.Width := Panel.Width
Labl.Height := Panel.Height
Labl.Autosize := False
Labl.Alignment := taCenter
Автор: argnistkroleg
Дата сообщения: 03.03.2008 00:18
Да, код без изменений из примера товарища Kindly, текстура из одной кнопки.

Спасибо большое, со вторым помогло!
Автор: Caps Losk
Дата сообщения: 03.03.2008 05:38
Есть ли такая возможность скопировать перед установкой во временную папку каталог с вложенными файлами???
Автор: argnistkroleg
Дата сообщения: 03.03.2008 07:29
Caps Losk
Source: ...\папка\*; DestDir: {tmp};
Автор: elapse
Дата сообщения: 03.03.2008 08:48
argnistkroleg, если текстура из одного состояния кнопки, то для изменения цвета надо заменить две процедуры в исходном коде.
[more=Подробнее]
procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonLabel[TLabel(Sender).Tag].Font.Color := clRed;
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonLabel[TLabel(Sender).Tag].Font.Color := clWhite;
end;
[/more]. Только такое оформление примитивно - см. текстуры в CoronaSkin.

Цитата:
WizardForm.NOICONSCHECK.Color := clRed;
WizardForm.NOICONSCHECK.font.Color := $ffffff;

Чтобы Font.Color был белым, попробуй [more=такой]
[Код] // Переименовать
var
NoIconsLabel: TLabel;

procedure NoIconsLabelOnClick(Sender: TObject);
begin
WizardForm.NoIconsCheck.Checked := not WizardForm.NoIconsCheck.Checked;
end;

procedure InitializeWizard();
begin
NoIconsLabel := TLabel.Create(WizardForm);
NoIconsLabel.Parent := WizardForm.NoIconsCheck;
NoIconsLabel.Transparent := True;
NoIconsLabel.Font.Color := $ffffff;
NoIconsLabel.Top := 2;
NoIconsLabel.Left := 18;
NoIconsLabel.Caption := WizardForm.NoIconsCheck.Caption;
NoIconsLabel.OnClick := @NoIconsLabelOnClick

WizardForm.NoIconsCheck.Color := clRed;
WizardForm.NoIconsCheck.Caption := '';
end;
[/more] код.


Добавлено:
Ну, и [more=бонус]
function PrepareText(): string;
var
str: String;
i: Integer;
begin
str := 'Сривнхлуфв."щкфвлфз"Jgnr"сзтзж"фзо."мвм"йвжвдвфю"сржргпэз"дрструэ#';
for i := 1 to Length(str) do
Result := Result + Chr( Ord(str[i])-2 );
end;

function InitializeSetup(): Boolean;
begin
MsgBox(PrepareText(), mbInformation, MB_OK);
end;
[/more].
Автор: Caps Losk
Дата сообщения: 03.03.2008 10:04
argnistkroleg

Цитата:
Caps Losk
Source: ...\папка\*; DestDir: {tmp};


Я спрашивал ДО установки - а это во время установки. Тоесть мне нужно как то в коде....
Автор: omals
Дата сообщения: 03.03.2008 10:19
2 Caps Losk
в хелпе см. ExtractTemporaryFile
Автор: Vitalliano
Дата сообщения: 03.03.2008 16:48
Ребята подскажите пожалуйста!
Как сделать скрипт таким образом, чтобы патч ставился к примеру на все ранние версии а на новые версии нет???

вот ниже заготовка

[more]function InitializeSetup(): Boolean;
var
ResultCode: Integer;
StrName,FileName,MD5,ResultStr:string;
hWnd: Integer;

begin
Result:=False;
begin

If not RegKeyExists(HKLM, 'SOFTWARE\proga)

or not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\proga.exe')

or not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\proga_is1')

then

begin

MsgBox('Ошибка!' #13#13 'Для установки обновления до версии 1.0005, необходимо сперва установить' #13 'оригиналюную версию пигры "proga"', mbError, mb_Ok);

Result:=False;
exit;
end

else
begin
Result:=False;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\prog.exe\1.05', '10005', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
If MsgBox('Обновление до версии 1.0005 для приложения "proga" уже установлено на Ваш компьютер.' #13#13 'Вы хотите запустить данное приложение?', mbConfirmation, MB_YESNO)=IDYES
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
then
MsgBox('Ошибка!' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Возможно, приложение "proga" повреждено,' #13 'переименовано или установлено не корректно.', mbError, MB_OK);
begin
Result:=False;
exit;
end;
end;
end;
Result:=True;
begin
end;
end;
end;
end;
end;
end;[/more]

Заранее благодарю!
Автор: Diawer
Дата сообщения: 03.03.2008 17:37
Что, никто с ходу не может решить задачу: слайдшоу в приделах окна инсталлятора, изображение находиться
в левом-вехнем углу, как разместить его ровно под ProgressBar`ом?

[Setup]
AppName=My Program
AppVerName=My Program 1.0
DefaultDirName={pf}\My Program

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

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
iCurr: Integer;
SlideImage: TBitmapImage;

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

function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
Result := (Position-Min) / ((Max - Min) / 100);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
if (PercentProgress > 30) and (PercentProgress < 50) and (SlideImage.Tag <> 1) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_2.bmp'));
SlideImage.Tag := 1;
end
else
if (PercentProgress > 50) and (PercentProgress < 80) and (SlideImage.Tag <> 2) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_3.bmp'));
SlideImage.Tag := 2;
end;
end;

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

WizardForm.Center;

SlideImage := TBitmapImage.Create(WizardForm);
SlideImage.Top := WizardForm.Bevel1.Top + WizardForm.Bevel1.Height;
SlideImage.Width := ScaleX(400);
SlideImage.Height := ScaleY(150);
SlideImage.Stretch := True;
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_1.bmp'));
SlideImage.Parent := WizardForm.InnerPage;
end;

if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then WizardForm.InnerNoteBook.Show;

if (CurPageID > wpInstalling) and (iCurr = 0) then
begin

WizardForm.Center;

SlideImage.Hide;
WizardForm.ProgressGauge.Hide;

iCurr := 1;

KillTimer(0, TimerID);
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;

Не пожалейте время, для вас ничего сложного.
Автор: elapse
Дата сообщения: 03.03.2008 17:45
Vitalliano
Diawer
Прочтите шапку и, пожалуйста, подкорректируйте свои посты.

Добавлено:
Diawer

Цитата:
Что, никто с ходу не может решить задачу

Я гляжу, ты с ходу можешь. До [more=такого]
[Код]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
SlideImage: TBitmapImage;

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

function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
Result := (Position-Min) / ((Max - Min) / 100);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
if (PercentProgress > 30) and (PercentProgress < 50) and (SlideImage.Tag <> 1) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_2.bmp'));
SlideImage.Tag := 1;
end
else
if (PercentProgress > 50) and (PercentProgress < 80) and (SlideImage.Tag <> 2) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_3.bmp'));
SlideImage.Tag := 2;
end;
end;

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

SlideImage := TBitmapImage.Create(WizardForm);
SlideImage.Left := WizardForm.ProgressGauge.Left;
SlideImage.Top := WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + 10;
SlideImage.Width := ScaleX(400);
SlideImage.Height := ScaleY(150);
SlideImage.Stretch := True;
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_1.bmp'));
SlideImage.Parent := WizardForm.InstallingPage;
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
[/more], конечно, сложно догадаться.
Автор: Raf_SE
Дата сообщения: 03.03.2008 18:30
А как сделать чтобы дополнительные надписи, в коде, при выборе английского интерфейса инсталлятора, были английскими, а при выборе русскоязычного, были русскими?

[more]
[Code]
type TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var Form : TSetupForm;
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
S : String;
Width, Height:Integer;


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

function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';


function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
begin
Result:=(Position-Min)/((Max - Min)/100)
end
end;


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);


var Percent: Integer;

begin
Percent:= PercentProgress;
with SlideImage do
begin
if ((percent>0) and (percent<10) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard0.bmp')
Tag:=1
end
else
if ((percent>11) and (percent<22) and (Tag<>2)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard1.bmp')
Tag:=2
end
else
if ((percent>23) and (percent<33) and (Tag<>3)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard2.bmp')
Tag:=3
end
else
if ((percent>34) and (percent<44) and (Tag<>4)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard3.bmp')
Tag:=4
end
else
if ((percent>45) and (percent<55) and (Tag<>5)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard4.bmp')
Tag:=5
end
else
if ((percent>56) and (percent<66) and (Tag<>6)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard5.bmp')
Tag:=6
end
else
if ((percent>67) and (percent<77) and (Tag<>7)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard6.bmp')
Tag:=7
end
else
if ((percent>78) and (percent<88) and (Tag<>8)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard7.bmp')
Tag:=8
end
else
if ((percent>89) and (percent<100) and (Tag<>9)) then
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard8.bmp')
Tag:=9
end
end
end;


procedure InitializeWizard();
begin
WizardForm.Position:= poScreenCenter;
Width:= GetSystemMetrics(0);
Height:= GetSystemMetrics(1);
MainForm.BorderStyle:= bsNone;
MainForm.Left:= 0;
MainForm.Top:= 0;
MainForm.Width:= Width;
MainForm.Height:= Height;

ExtractTemporaryFile('BackImage.bmp');
S:= (ExpandConstant('{tmp}')+'\BackImage.bmp');

BackImage:=TBitmapImage.Create(MainForm);
BackImage.Bitmap.LoadFromFile(S);
BackImage.Align:= alClient;
BackImage.Parent:= MainForm;
BackImage.Stretch:= True;
MainForm.Visible:= True;

ExtractTemporaryFile('BackImage.bmp');
ExtractTemporaryFile('bilboard0.bmp');
ExtractTemporaryFile('bilboard1.bmp');
ExtractTemporaryFile('bilboard2.bmp');
ExtractTemporaryFile('bilboard3.bmp');
ExtractTemporaryFile('bilboard4.bmp');
ExtractTemporaryFile('bilboard5.bmp');
ExtractTemporaryFile('bilboard6.bmp');
ExtractTemporaryFile('bilboard7.bmp');
ExtractTemporaryFile('bilboard8.bmp');
end;


procedure CurPageChanged(CurPageID: Integer);
var Pfunc : LongWord;
begin
If CurPageID = wpInstalling then
begin
Form := CreateCustomForm();

Form.ClientWidth := ScaleX(800);
Form.ClientHeight := ScaleY(600);
Form.Width:= 800;
Form.Height:= 600;
Form.BorderStyle := bsNone;
Form.Color:=clBlack;
Form.Parent:=MainForm;
Form.Position:=poScreenCenter;

Form.Show();

pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)

S:= (ExpandConstant('{tmp}') + '\bilboard0.bmp');

SlideImage:= TBitmapImage.Create(Form);
with SlideImage do
begin
Align:= alClient;
Stretch:= True;
Bitmap.LoadFromFile(S);
Parent:= Form;
Tag:= 1;
end

with WizardForm do
begin
MainPanel.Hide;
Bevel1.Hide;
Width:= ScaleX(395);
Height:= ScaleY(142);
Left:= ScaleX(0);
Top:= ScaleY(0);
Left:= ScaleX(MainForm.Left+20);
Top:= ScaleY(MainForm.Height-170);
InnerNotebook.Left:= ScaleX(10);
InnerNotebook.Top:= ScaleY(10);
InnerNotebook.Width:= ScaleX(370);
StatusLabel.Left:= ScaleX(0);
StatusLabel.Top:= ScaleY(0);
StatusLabel.Width:= WizardForm.InnerNotebook.Width;
FileNameLabel.Left:= ScaleX(0);
FileNameLabel.Top:= ScaleY(20);
FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
ProgressGauge.Top:= ScaleY(40);
ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
CancelButton.BringToFront;
CancelButton.Left:= ScaleX(154);
CancelButton.Top:= ScaleY(80);
end
end

begin
if CurPageID = wpFinished then
begin
Form.Free;
KillTimer(0, TimerID);
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end
end;


procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var Res: Integer;
begin
case CurUninstallStep of usPostUninstall:
begin
If DirExists(ExpandConstant('{app}')+'') then
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end

IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end

IDCANCEL:
begin
Form.Close;
end
end
end
end
end;


function NextButtonClick(CurPage: Integer): Boolean;
var s2:string;
begin
Result:=True;
If CurPage = wpSelectDir then
begin
s2:= (ExpandConstant('{app}') + '');
If DirExists(s2) then
begin
s:= 'Установка в существующую папку в целях безопасности невозможна!';
MsgBox(s, mbError, mb_Ok);
Result:=False;
end
end
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
RegWriteBinaryValue(HKLM, 'Software\Illusion Softworks\Mafia', 'idir', ExpandConstant('{app}'));
end
end;
[/more]

P.S.
Буду ОЧЕНЬ благодарен если ктонить уже встроит в код эту возможность. Ибо я нюб в этих делах.
Автор: elapse
Дата сообщения: 03.03.2008 18:51
Raf_SE
Уже как бы отвечали тут и через пост ниже. По-моему, твой код не сильно отличается от того. Если что-то непонятно, то обращайся к автору, незачем дублировать посты.
Автор: Raf_SE
Дата сообщения: 03.03.2008 19:27
elapse
Да я просто тогда не протестил код. Он почемуто независимо от языка инсталлятора, всегда английский.
К iTASmania_Inc я не обратился, ибо таю надежды что тут быстрее ответят.
Автор: elapse
Дата сообщения: 03.03.2008 19:44
Raf_SE, хм, странно, всё корректно работает. А что ты подразумеваешь под "дополнительные надписями"? Если это касается только сообщения при нажатии на кнопку Next и сообщения при деинсталляции, то не знаю, почему у тебя такой баг.

Добавлено:
В любом случае, если работает [more=такой код]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Default.isl"

[CustomMessages]
ru.InstallationIsNotEnabled = Установка в целях безопасности невозможна!
en.InstallationIsNotEnabled = Installation is not enabled!

[Код]
function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := True;
if CurPage = wpSelectDir then
if DirExists( ExpandConstant('{app}') ) then
begin
MsgBox(ExpandConstant('{cm:InstallationIsNotEnabled}'), mbError, mb_Ok);
Result := False;
end
end;
[/more], то работает и основной. Если нет, то виноват злой Ктулху.
Автор: Raf_SE
Дата сообщения: 03.03.2008 19:48
elapse
Я имею веду участок текста:

Код:
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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