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

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

Автор: Diawer
Дата сообщения: 03.07.2008 19:33
Genri, получается много файлов *.ico, *.bmp + ещё которые я использую

У меня есть [more=код] [Files]
Source: icon.ico; DestDir: {app}; Flags: ignoreversion

[Code]
procedure InitializeUninstallProgressForm();
begin
SendMessage(UninstallProgressForm.Handle, $0080, 1, LoadImage(0,ExpandConstant('{app}')+'\icon.ico',1,16,16,$1010));
end; [/more] добавления иконки слева вверху, может его можно использовать для смены иконки на странице с прогрессбаром когда идёт деинсталляция


Добавлено:
то есть подпровить
Автор: Genri
Дата сообщения: 03.07.2008 20:09
Diawer -- может подойдет использование UninstallFilesDir={app}\uninst и все что касается деинсталлятора бросать туда?
Автор: elapse
Дата сообщения: 03.07.2008 20:09
Diawer, в принципе убирается в одну строку. Обычной командой. Только не пойму, зачем?

Код:
procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm.WizardSmallBitmapImage.Hide;
end;
Автор: Genri
Дата сообщения: 03.07.2008 20:11
elapse -- это не убирается, это прячется. Убирается UninstallProgressForm.WizardSmallBitmapImage.Free;
Только я тоже не пойму - зачем ?
Автор: alfonser
Дата сообщения: 04.07.2008 21:01
Подскажите, пожалуйста!
Путь установки считываю с реестра:
{reg:HKLM\SOFTWARE\Sierra Entertainment\TimeShift\1.00.000,PathToEXE}
При инсталяции определяется путь:
"C:\\GAME\\bin\\TIMESHIFT.EXE"
А мне надо, чтобы установка шла в bin, а не в TIMESHIFT.EXE
Спасибо!
Автор: Nekt
Дата сообщения: 04.07.2008 23:24
другого ключа нету?
Автор: alfonser
Дата сообщения: 04.07.2008 23:30
Нет, вот вся ветка:
[HKEY_LOCAL_MACHINE\SOFTWARE\Sierra Entertainment\TimeShift\1.00.000]
"CDKey"="BYN9-LAB2-NAL5-TEN2-2583"
"UninstallPath"="\"C:\\Program Files\\InstallShield Installation Information\\{1367FA2F-2B3D-430F-872F-588B93420BFC}\\setup.exe\" -runfromtemp -l0x0019"
"PathToEXE"="C:\\GAME\\bin\\TIMESHIFT.EXE"
Автор: serg_aka_lain
Дата сообщения: 05.07.2008 00:15
alfonser

Есть ещё ветка

HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{IDGame}
InstallLocation=
Автор: alfonser
Дата сообщения: 05.07.2008 00:40
serg_aka_lain
Спасибо! Все получилось!
А я даже не обратил внимания!
Автор: boss911
Дата сообщения: 05.07.2008 22:42
Что нужно сделать в скине "Slate" (в точных подробностях, плиз), чтобы пользователь не смог отредактировать путь в строке, где указывается, куда будет установлено приложение, но при этом, чтобы путь можно было выбирать через кнопку "Обзор"? То есть, что ли, сделать строку не активной (не редактируемой).

Автор: Sampron
Дата сообщения: 05.07.2008 22:45
boss911
procedure InitializeWizard();
begin
WizardForm.DirEdit.ReadOnly:=True
end;
Автор: boss911
Дата сообщения: 05.07.2008 23:29
Как бы вот так сделать?

Код: procedure CurStepChanged(CurStep: TSetupStep);
var
FreeMB, TotalMB: Cardinal;

begin
DelTree(ExpandConstant('{app}') + '\ResFiles', True, True, True);
DelTree(ExpandConstant('{app}') + '\TempFiles', True, True, True); Check: not IsTaskSelected('MyComponent')
end;
end;
Автор: Sampron
Дата сообщения: 06.07.2008 00:07
boss911
procedure CurStepChanged(CurStep: TSetupStep);
begin
if IsTaskSelected('MyComponent') = False then
if CurStep = ssDone then
DelTree(ExpandConstant('{app}\TempFiles'), True, True, True)
end;
Автор: serg_aka_lain
Дата сообщения: 06.07.2008 00:10
boss911

Цитата:
То есть, если компонент (птица) не выбран, папка 'TempFiles' после установки удалятся не будет.

[more]

Если Дополнительная задача, то так

begin
if IsTaskSelected('MyComponent') then
begin
DelTree(ExpandConstant('{app}') + '\TempFiles', True, True, True);
end;
end;

если компонент

begin
if IsComponentSelected('MyComponent') then
begin
DelTree(ExpandConstant('{app}') + '\TempFiles', True, True, True);
end;
end;

[/more]
Автор: boss911
Дата сообщения: 06.07.2008 01:08
Sampron и serg_aka_lain

Ммм, ребята, так в таком случае это распространится на всю процедуру, а мне нужно на конкретную задачу в ней:

Код: procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
DelTree(ExpandConstant('{app}') + '\Folder, True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder2, True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder3, True, True, True);
DelTree(ExpandConstant('{app}') + '\TempFiles', True, True, True);
end;
Автор: serg_aka_lain
Дата сообщения: 06.07.2008 01:32
boss911


Цитата:
нужно на конкретную задачу в ней
[more]


procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
DelTree(ExpandConstant('{app}') + '\Folder', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder2', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder3', True, True, True);
end;
if IsTaskSelected('MyComponent') then
begin
DelTree(ExpandConstant('{app}') + '\TempFiles', True, True, True);
end;
end;

[/more]

Автор: boss911
Дата сообщения: 06.07.2008 03:42
serg_aka_lain

То что нужно, спасибо ребята. Вот еще хотел уточнить, будет ли правильно, если сделать [more=так]

Код: procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
DelTree(ExpandConstant('{app}') + '\Folder', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder2', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder3', True, True, True);
end;
if IsTaskSelected('BackUp') then
begin
DelTree(ExpandConstant('{app}') + '\TempFiles\*.log', False, True, False);
end;
if not IsTaskSelected('BackUp') then
begin
DelTree(ExpandConstant('{app}') + '\TempFiles', True, True, True);
end;
end;
Автор: serg_aka_lain
Дата сообщения: 06.07.2008 13:46
boss911

Цитата:
В данном случае надо, чтобы со снятой галкой удалялась вся папка 'TempFiles', а если галка установлена, то удаляются только файлы 'TempFiles\*.log'.
[more]

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
DelTree(ExpandConstant('{app}') + '\Folder', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder2', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder3', True, True, True);
end;
if IsTaskSelected('BackUp') then
begin
DelTree(ExpandConstant('{app}') + '\TempFiles\*.log', False, True, False);
end;
if IsTaskSelected('BackUp') = False then
begin
DelTree(ExpandConstant('{app}') + '\TempFiles', True, True, True);
end;
end;

[/more]


Цитата:
выполняется только удаления папки или еще в придачу '\TempFiles\*.log' .


- Внутри папки тоже всё удалится ( ".log" в Т.Ч.)

Автор: boss911
Дата сообщения: 06.07.2008 16:30
serg_aka_lain

Ага, ясно.


Цитата:
Внутри папки тоже всё удалится ( ".log" в Т.Ч.)

Это понятно, но в данном случае мне не надо, чтобы при удалении всей папки еще и выполнялась команда на удаления файлов в этой папке. В принципе, это нечего страшного, но зачем инсталлятору выполнять то, что ненужно. Надеюсь, оно так и будет?
Автор: ComradG
Дата сообщения: 06.07.2008 19:44
Corona Skin уже порядком поднадоела, неужели нече нового?
Кстати, по поводу оформления внешнего вида, никто не пробовал юзать
SkinCrafter от NSIS? Я малость dll-ку подправил и все пучком!
Автор: Sampron
Дата сообщения: 06.07.2008 20:16
ComradG
Давно уже юзали SkinCrafter от NSIS, интересно а что подправил?
Есть неплохая альтернатива: http://isskin.codejock.com/
Автор: Victor_Dobrov
Дата сообщения: 07.07.2008 02:30
ComradG
Цитата:
Corona Skin уже порядком поднадоела, неужели нече нового?

Спасибо за такой добрый отзыв за мою работу. А ведь скина там процентов 5, остальное дополнения для Inno Setup.
Автор: nOobCrafter
Дата сообщения: 07.07.2008 10:38
Хелп народ. Вот [more=код][Setup]
AppName=BrowseFile
AppVerName=BrowseFile
DefaultDirName=BrowseFile
DisableStartupPrompt=true
Uninstallable=false
Compression=bzip
CreateAppDir=false
DisableProgramGroupPage=true

[Tasks]
Name: askini; Description: Choose a custom INI file; GroupDescription: Configuration:


[Code]

type

TOpenFileName = record
lStructSize: Longint;
hwndOwner: Longint;
hInstance: Longint;
lpstrFilter: PChar;
lpstrCustomFilter: PChar;
nMaxCustFilter: Longint;
nFilterIndex: Longint;
lpstrFile: PChar;
nMaxFile: Longint;
lpstrFileTitle: PChar;
nMaxFileTitle: Longint;
lpstrInitialDir: PChar;
lpstrTitle: PChar;
Flags: Longint;
nFileOffset: Word;
nFileExtension: Word;
lpstrDefExt: PChar;
lCustData: Longint;
lpfnHook: Longint;
lpTemplateName: PChar;
end;

function GetOpenFileName(var lpofn: TOpenFileName): Boolean; external
'GetOpenFileNameA@comdlg32.dll';

Const OFN_HIDEREADONLY = $4;


function NextButtonClick(CurPage: Integer): Boolean;
var
F: TOpenFileName;
S: String; z : char;
hwnd: Longint;
begin

// by default go to next page
Result := true;

z := Chr(0);
hwnd := StrToInt(ExpandConstant('{wizardhwnd}'));

// if curpage is wpSelectTasks
if CurPage = wpSelectTasks then
begin

if ShouldProcessEntry( '','askini') = srYes then
    begin

// set defailt file
S := 'config.ini';
// get enough space
SetLength(S, 512);
// set wizard HWND as owner
F.hwndOwner := hwnd;
// set structure size
F.lStructSize := 76;
// set S buffer for filename
F.lpstrFile := S;
F.nMaxFile := Length(S);
// set dialog title
F.lpstrTitle := 'Choose configuration file';
// set filters
F.lpstrFilter := 'INI files (*.ini)' + z + '*.ini' + z +
'All files (*.*)' + z + '*.*' + z + z ;
// set flags
F.Flags := OFN_HIDEREADONLY;
// set initial dir as system
F.lpstrInitialDir := ExpandConstant('{sys}');

if GetOpenFileName(F) then begin
     MsgBox( 'File choosed:'+ #13 + #13 + S, 0, 0);
     Result := true;
end
else
     Result := false;

end;

end;

end;[/more] из учебника, а вот мой [more=код][Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName=C:\innosetup\output\2
DisableStartupPrompt=true
Compression=bzip
Uninstallable=false

DisableProgramGroupPage=true
OutputBaseFilename=setup

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: {app}

[Tasks]
Name: askini; Description: Укажите расположение ключа; GroupDescription: Configuration:

[Code]

type

TOpenFileName = record
lStructSize: Longint;
hwndOwner: Longint;
hInstance: Longint;
lpstrFilter: PChar;
lpstrCustomFilter: PChar;
nMaxCustFilter: Longint;
nFilterIndex: Longint;
lpstrFile: PChar;
nMaxFile: Longint;
lpstrFileTitle: PChar;
nMaxFileTitle: Longint;
lpstrInitialDir: PChar;
lpstrTitle: PChar;
Flags: Longint;
nFileOffset: Word;
nFileExtension: Word;
lpstrDefExt: PChar;
lCustData: Longint;
lpfnHook: Longint;
lpTemplateName: PChar;
end;

function GetOpenFileName(var lpofn: TOpenFileName): Boolean; external
'GetOpenFileNameA@comdlg32.dll';

Const OFN_HIDEREADONLY = $4;


function NextButtonClick(CurPage: Integer): Boolean;
var
str: string;
F: TOpenFileName;
S: String; z : char;
hwnd: Longint;
begin

// by default go to next page
Result := true;

z := Chr(0);
hwnd := StrToInt(ExpandConstant('{wizardhwnd}'));

// if curpage is wpSelectTasks
if CurPage = wpSelectTasks then
begin

    
// set defailt file
S := 'key.reg';
// get enough space
SetLength(S, 512);
// set wizard HWND as owner
F.hwndOwner := hwnd;
// set structure size
F.lStructSize := 76;
// set S buffer for filename
F.lpstrFile := S;
F.nMaxFile := Length(S);
// set dialog title
F.lpstrTitle := 'Укажите расположение ключа';
// set filters
F.lpstrFilter := 'Ключ';
// set flags
F.Flags := OFN_HIDEREADONLY;
// set initial dir as system
F.lpstrInitialDir := ExpandConstant('{app}');

if GetOpenFileName(F) then else
     Result := false;

end;

end;[/more] и все бы хорошо но в данном скрипте есть ошибочка, даже при снятой галочке, при нажатии на кнупочку "Далее" всеравно выпрыгивает окошко выбора, как бы это пофиксить?... То есть что бы при снятой галочке просто продолжалась обычная установка и эта менюшка игнорилась. На строчку "if ShouldProcessEntry( '','askini') = srYes then" в оригинальном скрипте ругается. И как указать что бы оно выбранный ключ сразу же КОПИРОВАЛО в папку допустим C:\123, то есть что бы непредлагало куда мне его кинуть во время инстала, а сразу ложило в дефолтную папку...
Автор: boss911
Дата сообщения: 07.07.2008 18:04
Как при выборе языка перед установкой, применить то или иное лицензионное соглашение в формате RTF? Их у меня будет двое.

Код: [Setup]
LicenseFile=C:\License.rtf

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
Name: en; MessagesFile: compiler:Default.isl
Автор: Sandy Ann
Дата сообщения: 07.07.2008 19:03
Помогите советом!
Как реализовать в Inno поддержку юникода в диалогах на примере. Нужно кровь из носа, чтоб была установка на русском, вне зависимости от языка в системе.
Заранее спасибо
Автор: ComradG
Дата сообщения: 07.07.2008 19:51
Вообще реализация проста: в исходниках самой dll-ки SkinCrafter'а есть, если так мона выразиться, брешь, которая переписывается полностью под Inno,т.е. интегрирется с ним, в результате чего мона юзать скины, как в NSIS. Исходниками могу поделиться.

Добавлено:
А на http://isskin.codejock.com/ не так интересно.Смотрел-не пондравилось
А по поводу Corona Skin я ничего принципиально не имею, тока ХВАТИТ уже ею гоношиться! Да и потом, лично Victor_Dobrov - одна работа это еще не повод для того, чтобы делать из себя V.I.P. Разрабатывай ужо новое!
Автор: Sandy Ann
Дата сообщения: 07.07.2008 21:11
ComradG
Можно поросить по-подробнее метод реализации? Как для блондинки

Цитата:
Исходниками могу поделиться

Обязательно!
Автор: ComradG
Дата сообщения: 07.07.2008 21:38
Кидаю тока на мыло )))
Автор: Sandy Ann
Дата сообщения: 07.07.2008 21:46
ComradG
В профиле либо
Sandyrambler@rambler.ru
Спасибо
Автор: ComradG
Дата сообщения: 07.07.2008 21:48
Да, забыл пердупердить! саму dll-ку я правил на СиС'ках (C++). При надобности могу переписать код в Delphi или Python - кому чего. Если надо, магу и ща пАдробней (как слышится, так и пишется рассказать

Добавлено:
Стоп! А для чего блондинкам инстяллеры?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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