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

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

Автор: skeptik_vdm
Дата сообщения: 08.03.2009 23:18
Такой вопрос хочу добавить в скрипт такую проверку допустим если в системе присутствует опредленная программа то она не ставится а переходит сразу на установку другой а присутствие программы определяется из реестра!!!
Автор: DeKaNszn
Дата сообщения: 09.03.2009 01:41
skeptik_vdm

[no][Components]
Name: number1; Description: number1; Check: checking('Software\number1','key')
;Компонент не будет отображаться, если есть значение в реестре

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion; Check: checking('Software\MyProg','Path')
;файл не будет копироваться, если есть значение в реестре

[Code]
function checking(subkey, param: string):boolean;
begin
If RegValueExists(HKLM, subkey, param)
Then Result:=false
Else Result:=true;
end;[/no]
Автор: Qarma
Дата сообщения: 09.03.2009 09:22

Цитата:
Цитата:
Скажите как совместить этот код -
Подробнее...

с этим:

Подробнее...

Просто

Ещё кое что спрошу: как брать сраницу доп компонентов, ведь уже есть где выбрать - создать или не создавать ярлык на рабочий стол?
Сори за мой корявый русский....
Автор: msatmb
Дата сообщения: 09.03.2009 10:08

Цитата:
В представленных кодах можно обойтись простым копи-паст.

Но вот с этим #include "SHFileOperation.iss" могут быть конфликты. Скорее всего совмещать нужно его с кодом бэкапа.
PS Нужен код этого файла, для совмещения.

В том-то и дело что если просто копипастом, то при компилировании он ошибку выдает...
[more=Вот];***************************************************************;
;****************** SHFileOperation.iss ************************;
;***************************************************************;
;* Include this file in project. Example:
;* #include "SHFileOperation.iss"
;***************************************************************;
;************************ 1 ************************************;
;* function CopyDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;* CopyDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;* CopyDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 2 ************************************;
;* function MoveDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;* MoveDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;* MoveDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 3 ************************************;
;* function DelDir(dir: string; toRecycle: Boolean): Boolean;
;* If <toRecycle> is True, <dir> deleted in Recycle Bin.
;***************************************************************;
;************************ 4 ************************************;
;* function RenameDir(const fromDir, toDir: string): Boolean;
;***************************************************************;
;***************************************************************;
;***************************************************************;

[Code]
type
TSHFileOpStruct = record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word; // FILEOP_FLAGS;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND; // Pointer;
lpszProgressTitle: PChar; { only used if FOF_SIMPLEPROGRESS }
end;

const
// use in wFunc
{ $EXTERNALSYM FO_MOVE }
FO_MOVE = $0001;
{ $EXTERNALSYM FO_COPY }
FO_COPY = $0002;
{ $EXTERNALSYM FO_DELETE }
FO_DELETE = $0003;
{ $EXTERNALSYM FO_RENAME }
FO_RENAME = $0004;
// use in fFlags
{ $EXTERNALSYM FOF_MULTIDESTFILES }
FOF_MULTIDESTFILES = $0001;
{ $EXTERNALSYM FOF_CONFIRMMOUSE }
FOF_CONFIRMMOUSE = $0002;
{ $EXTERNALSYM FOF_SILENT }
FOF_SILENT = $0004; { don't create progress/report }
{ $EXTERNALSYM FOF_RENAMEONCOLLISION }
FOF_RENAMEONCOLLISION = $0008;
{ $EXTERNALSYM FOF_NOCONFIRMATION }
FOF_NOCONFIRMATION = $0010; { Don't prompt the user. }
{ $EXTERNALSYM FOF_WANTMAPPINGHANDLE }
FOF_WANTMAPPINGHANDLE = $0020; { Fill in
SHFILEOPSTRUCT.hNameMappings
Must be freed using
SHFreeNameMappings }
{ $EXTERNALSYM FOF_ALLOWUNDO }
FOF_ALLOWUNDO = $0040;
{ $EXTERNALSYM FOF_FILESONLY }
FOF_FILESONLY = $0080; { on *.*, do only files }
{ $EXTERNALSYM FOF_SIMPLEPROGRESS }
FOF_SIMPLEPROGRESS = $0100; { means don't show names of files }
{ $EXTERNALSYM FOF_NOCONFIRMMKDIR }
FOF_NOCONFIRMMKDIR = $0200; { don't confirm making any
needed dirs }
{ $EXTERNALSYM FOF_NOERRORUI }
FOF_NOERRORUI = $0400; { don't put up error UI }


function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer;
external 'SHFileOperation@shell32.dll stdcall';

{****************************************************************}
{****************************************************************}
{****************************************************************}

function BackupDir(const fromDir, toDir: string; IsMove: Boolean): Boolean;
var
fos: TSHFileOpStruct;
_fromDir, _toDir: string;
SR: TFindRec;
res: Boolean;
begin
ForceDirectories(toDir);
if IsMove then
fos.wFunc := FO_MOVE else
fos.wFunc := FO_COPY;
fos.fFlags := FOF_FILESONLY or FOF_SILENT or
FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
_fromDir:= AddBackslash(fromDir);
_toDir := AddBackslash(toDir);
if (Length(fromDir) = Length(_fromDir)) then
begin
res:= FindFirst(_fromDir + '*', SR);
try
while res do
begin
if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
begin
if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
begin
_fromDir:= _fromDir + SR.Name + #0#0;
_toDir := _toDir + #0#0;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
end else
begin
_fromDir:= _fromDir + SR.Name + #0#0;
_toDir := _toDir + SR.Name + #0#0;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
end;
Result := (0 = ShFileOperation(fos));
_fromDir:= ExtractFilePath(_fromDir);
_toDir:= ExtractFilePath(_toDir);
end;
res := FindNext(SR);
end;
finally
FindClose(SR);
end;
end else
begin
_fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
_toDir := RemoveBackslashUnlessRoot(_toDir) + #0#0;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
Result := (0 = ShFileOperation(fos));
end;
end;

{****************************************************************}
function MoveDir(const fromDir, toDir: string): Boolean;
begin
Result := BackupDir(fromDir, toDir, True);
end;

{****************************************************************}
function CopyDir(const fromDir, toDir: string): Boolean;
begin
Result := BackupDir(fromDir, toDir, False);
end;

{****************************************************************}
function DelDir(dir: string; toRecycle: Boolean): Boolean;
var
fos: TSHFileOpStruct;
_dir: string;
begin
_dir:= RemoveBackslashUnlessRoot(dir) + #0#0;
fos.wFunc := FO_DELETE;
fos.fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
if toRecycle then
fos.fFlags := fos.fFlags or FOF_ALLOWUNDO;
fos.pFrom := PChar(_dir);
Result := (0 = ShFileOperation(fos));
end;

{****************************************************************}
function RenameDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
_fromDir, _toDir: string;
begin
_fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
_toDir := RemoveBackslashUnlessRoot(toDir) + #0#0;
fos.wFunc := FO_RENAME;
fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
FOF_SILENT or FOF_NOCONFIRMATION;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
Result := (0 = ShFileOperation(fos));
end;
{****************************************************************}
{****************************************************************}
{****************************************************************}
[/more] код файла что инклюдится.
Автор: nOobCrafter
Дата сообщения: 09.03.2009 10:45
Может все же кто нибулдьд помоч с этим вопросом?

Цитата:
День добрый, возникла надобность дописать режим обновления для инсталяшки, сами галочки сделать и т.д. проблем нету, вопрос вот в чем, как можно указать что устанавливать нужно только определенные файлы из всей кучи, а больше ничего не делать?
Допустим у меня есть набор файлов и папок, при чистой установке копирются все папки и файлы, а при обновлении только несколько файлов, все это для того чтобы уменьшить размер дистрибутива, а не пихать по разным папкам (а так же не создавать компонент которому присваивать отдельно эти пару файлов %)), а в установке при выборе обновления просто копировать нужные файлы из диструбтива.
примерно у меня папка cодержимое папки при чистой установке образно:
___________________________________________________
Установочная папка > data\audio\setting\redme.txt\proga.exe

при обновлении:
___________________________________________________
Установочная папка > proga.exe\readme.txt

Вот живой пример организации:

Код: Source: C:\777\guard\*; DestDir: {app}\777\Guard; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a
Source: C:\777\access\*; DestDir: {app}\777\Access; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b


надо пару файлов из одной папки и пару из другой.. Уфф..надеюсь обьяснил подробней некуда %)).
Автор: clemenco
Дата сообщения: 09.03.2009 11:02
msatmb
Наверное, где то так. Инклуд не трогал.
[more]#include "SHFileOperation.iss"

[Setup]
AppName=Brettzies Weapon Pack
AppVerName=Brettzies Weapon Pack v4.0
DefaultDirName={code:GetInstallDir}
DefaultGroupName={code:GetInstallGroup}
DisableProgramGroupPage=True
DisableReadyPage=True
DirExistsWarning=false
EnableDirDoesntExistWarning=no
CreateUninstallRegKey=no
Uninstallable=no
DisableFinishedPage=True
SolidCompression=true
Compression=lzma/ultra64

[Icons]
Name: "{group}\Руководство по Brettzies Weapon Pack"; Filename: "{app}\readme_bp_weaponspack_v4.0_graw.pdf"; WorkingDir: "{app}"

[Files]
Source: "D:\MyInno_Script\Advanced Warfighter\Brettzies_wpnPack_GRAW\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs; BeforeInstall: CreateBackup;

[Tasks]
Name: src; Description: "Backup"

[Code]
function MoveFile(const srcFile, destFile: PChar): Integer;
external 'MoveFileA@kernel32.dll stdcall';

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
if IsTaskSelected('src') then
begin
basePath := ExpandConstant('{app}');
srcFile := ExpandConstant(CurrentFileName);
shortPath := srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile := ExpandConstant('{app}\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Backup\'));
end;
end;

function GetInstallGroup(Group: string): string;
begin
Group := '';
RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghost Recon 3 - Advanced Warfighter_is1\','Inno Setup: Icon Group', Group);
Result := Group;
end;
function GetInstallDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'Software\Ubisoft\Ghost Recon Advanced Warfighter','InstalledPath', Dir);
Result := Dir;
end;

function InitializeSetup(): Boolean;
var
S: String;
begin
Result := True;
S := ExpandConstant('{code:GetInstallDir}');
if S = '' then
begin
SuppressibleMsgBox('Игра Ghost Recon Advanced Warfighter не найдена!', mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;

{
условия необходимые для определения обновлялась игра или нет,
размер или наличие новых файлов, запись в реестре,
наличие деинсталлятора патча,
в данном случае проверяется наличие деинсталлятора
--> проверка ... если условие выполняется Result := False
}

if MsgBox('Игра Ghost Recon Advanced Warfighter найдена, желаете установить мод Brettzies Weapon Pack v4.0?', mbConfirmation, MB_YESNO) = IDNO then
Result := False;
Exit;
end;

procedure CurPageChanged(CurPageID: Integer);
var
S: String;
begin
if CurPageID = wpWelcome then
S := ExpandConstant('{code:GetInstallDir}');
if S <> '' then
WizardForm.NextButton.OnClick(WizardForm.NextButton);

if CurPageID = wpSelectDir then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Модификация ' + '{#SetupSetting("AppVerName")}' + ' установлена!', mbInformation, MB_OK);
end;[/more]
Автор: Prince_Tails
Дата сообщения: 09.03.2009 11:11
Как сделать чтобы при установке инсталятьра, можно было extracting распаковать автоматически и в папку установки( сам extracting находился бы на диске)?
Ответьте пожалуйста
Автор: Qarma
Дата сообщения: 09.03.2009 12:32

Цитата:

Цитата:
Цитата:
Скажите как совместить этот код -
Подробнее...

с этим:

Подробнее...

Просто

Ещё кое что спрошу: как брать сраницу доп компонентов, ведь уже есть где выбрать - создать или не создавать ярлык на рабочий стол?
Сори за мой корявый русский....

Всё, сам разобрался....

Добавлено:
Слушайте, а как сделать так чтобы вместо кнопки Далее была надпись "установить" и именно на этой сранице http://pic.rapidshare.ru/955765
Автор: skeptik_vdm
Дата сообщения: 09.03.2009 13:44
Qarma

Цитата:
Слушайте, а как сделать так чтобы вместо кнопки Далее была надпись "установить" и именно на этой сранице http://pic.rapidshare.ru/955765


procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
WizardForm.NextButton.Caption:='Установить';
end;
end;
Автор: Qarma
Дата сообщения: 09.03.2009 14:15
А как это:


Цитата:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
WizardForm.NextButton.Caption:='Установить';
end;
end;


скрестить с этим:


procedure CurPageChanged(CurPageID: Integer);

begin

PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpFinished then KillTimer(0, TimerID);
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False

end;
end;



Автор: DeKaNszn
Дата сообщения: 09.03.2009 14:23
Qarma

[no]procedure CurPageChanged(CurPageID: Integer);

begin

PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpFinished then KillTimer(0, TimerID);
if CurPageID = wpSelectDir
then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;
end;
end; [/no]
Автор: Qarma
Дата сообщения: 09.03.2009 14:27
Спасибо всем!
Автор: Yoldosh
Дата сообщения: 09.03.2009 15:40
Привет всем как зделать проверку системы как в игре сталкер

Добавлено:
а как сменить иконку деинсталятора unins000.exe
Автор: msatmb
Дата сообщения: 09.03.2009 15:54
clemenco - спасибо, все работает!
Автор: Yoldosh
Дата сообщения: 09.03.2009 16:42
кто нибудь помогите как зделать проверку системы как в игре сталкер и сменить иконку деинсталятора unins000.exe
Автор: skeptik_vdm
Дата сообщения: 10.03.2009 06:50
Yoldosh

Цитата:
кто нибудь помогите как зделать проверку системы как в игре сталкер и сменить иконку деинсталятора unins000.exe


По 1-му вопросу в шапке есть "Коллекция скриптов" там есть скрипт "Ultimate Test" это как раз то самое что нужно
По 2-му вопросу добавь это
IconFilename:Icon.ico(тут указываешь иконку)
Автор: mikutu
Дата сообщения: 10.03.2009 07:47
Использую Corona Skin и вот заметил за последнюю неделю несколько глюков связанных с антивирусами.
1) ImgGdiPlus.dll распознается вирусом nod32 (во всяком случае в 3 версии), но установить можно
2) InnoCallBack.dll распознается вирусом avast и установка не возможна.
Автор: Yoldosh
Дата сообщения: 10.03.2009 08:31
skeptik_vdm Большое спасибо
Автор: WinstAn70
Дата сообщения: 10.03.2009 11:27
Помогите требуется скрипт запуска любого приложения (.exe), до запуска основного установщика.
(то есть - сначала запустить указанное приложение, после - запустит сам установщик)
Подскажите возможно ли это!
Автор: skeptik_vdm
Дата сообщения: 10.03.2009 11:34
mikutu

Не может быть такого у меня НОД32 версия 3 стоит и молчит ни чего не говорит и Каспер не жалуется!!!
Автор: Prince_Tails
Дата сообщения: 10.03.2009 11:40

Цитата:
Как сделать чтобы при установке инсталятьра, можно было extracting распаковать автоматически и в папку установки( сам extracting находился бы на диске)?
Ответьте пожалуйста

Помогите мне кто-нибудь
Автор: Victor_Dobrov
Дата сообщения: 10.03.2009 13:05
mikutu
А зачем использовать "антивирус", который даёт ложные срабатывания на безвредных (хоть и сжатых при помощи UPack) файлах?

Впрочем, попробуй заменить InnoCallback.dll на эту незапакованную версию.
С файлом ImgGdiPlus.dll сложнее - или отключи Медиаплеер и фоновую картинку или обращайся к автору программы SBRunScr.

Всем новичкам
Напомню, что в форуме работает поиск и есть версия для печати.
Ещё можно ознакомиться с заголовком (шапкой), чтобы не захламлять тему вопросами, на 9 из 10-ти которых ответы уже были.
Автор: skeptik_vdm
Дата сообщения: 10.03.2009 13:41
mikutu

Могу добавить по поводу НОДа там есть такой параметр как "Обнаружение потенциально нежелательных приложений" если попробовать его отключить то вероятно он не будет распознавать эти библиотеки как вирусы!!!
Автор: alfonser
Дата сообщения: 10.03.2009 14:03
Подскажите, пожалуйста!
Удаляю файлы:
DeleteFile('{win}\xxx.dll');
Но как сделать, чтобы это удаление происходило именно в конце установки?
Спасибо!
Блин! Файл почему-то не удаляется!
Автор: Qarma
Дата сообщения: 10.03.2009 14:57

Цитата:
Подскажите, пожалуйста!
Удаляю файлы:
DeleteFile('{win}\xxx.dll');
Но как сделать, чтобы это удаление происходило именно в конце установки?
Спасибо!

Добавь Flags: postinstall
Автор: chelobey
Дата сообщения: 10.03.2009 17:31
спрашиваю уже четвертый раз ):<

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

[more=вот код...]
Код: #define MyAppName "Program"
#define MyAppVerName "1.0"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\Program 1.0

[Components]
Name: prog1; Description: program1; Types: var1; Flags: exclusive
Name: prog2; Description: program2; Types: var2; Flags: exclusive

[Types]
Name: var1; Description: prog1
Name: var2; Description: prog2; Flags: iscustom

[Files]

Source: Button1.bmp; Flags: dontcopy
Source: prog1.rtf; Flags: dontcopy
Source: prog2.rtf; Flags: dontcopy

[no][Code][/no]
var
Memo: TRichEditViewer;
CheckListBox: TNewCheckListBox;
CancelButton: TButton;

Check: Boolean;
i, CurPage: Integer;
InfoButton, UpdateButton: TButton;
InfoPage: TWizardPage;
InfoImage: TBitmapImage;



Procedure CheckFoldersOnClick(Sender: TObject);
Begin
if (InfoButton.Tag= 1) then begin

InfoButton.Caption:= 'Вернуться';
InfoButton.Cursor:= crDefault;
UpdateButton.Cursor:= crDefault;
CancelButton.Tag:= 1
end else
CancelButton.Tag:= 0
end;

Procedure UpdateButtonOnClick(Sender: TObject);

Begin
Check:=True;
end;

Procedure CloseInfo; Begin If InfoButton.Tag= 1 then InfoButton.OnClick(InfoButton) End;

Function BackButtonClick(CurPageID: Integer): Boolean;
Begin Result:= True CloseInfo End;

Function NextButtonClick(CurPageID: Integer): Boolean;
Begin If InfoButton.Tag= 1 then else Result:= True
if (i =wpWelcome) and (InfoButton.Tag= 1) then Result:= True
CloseInfo
end;

Procedure InfoButtonOnClick(Sender: TObject);
Begin
if InfoButton.Tag= 0 then begin
InfoPage:= CreateCustomPage(CurPage, 'Описание', '')

Memo := TRichEditViewer.Create(InfoPage);
Memo.Top := ScaleY(0);
Memo.Width := InfoPage.SurfaceWidth - ScaleX(0);;
Memo.Height := InfoPage.SurfaceHeight - ScaleY(0);
Memo.ScrollBars := ssVertical;
Memo.Parent := InfoPage.Surface;
Memo.Lines.LoadFromFile(ExpandConstant('{tmp}\prog1.rtf'));

UpdateButton:= TButton.Create(WizardForm);

with UpdateButton do begin
OnClick:= @UpdateButtonOnClick;
end;

UpdateButton.OnClick(UpdateButton);
WizardForm.NextButton.OnClick(WizardForm.NextButton);
InfoButton.Visible:= True

InfoButton.Caption:='Закрыть инфу';
InfoButton.Cursor:= crHand;
InfoButton.Tag:= 1;

end

else begin
InfoButton.Caption:= 'Описание';
InfoButton.Cursor:= crHelp;
InfoButton.Tag:= 0;

WizardForm.BackButton.OnClick(WizardForm.BackButton);
WizardForm.PageDescriptionLabel.Font.Color:= WizardForm.PageNameLabel.Font.Color
UpdateButton.Free
InfoPage.Free
end
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPage:=CurPageID
if CurPageID=wpReady then begin WizardForm.ReadyMemo.ScrollBars:=ssVertical
end;
if CurPageID<>wpSelectComponents then begin InfoButton.Visible:= False
end;
if CurPageID=wpSelectComponents then begin InfoButton.Visible:= True
end;
end;


Procedure InitializeWizard;
Begin

ExtractTemporaryFile('prog1.rtf');

CancelButton:= WizardForm.CancelButton;
InfoButton:= TButton.Create(WizardForm);

with InfoButton do begin
Left:= WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
Top:= CancelButton.Top;
Width:= 132;
Height:= 27;
Caption:= 'Описание';
ShowHint:=True;
OnClick:= @InfoButtonOnClick;
Parent:= WizardForm;

InfoImage:=TBitmapImage.Create(WizardForm)
with InfoImage do begin
AutoSize:=True
Enabled:=False
ExtractTemporaryFile('Button1.bmp')
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button1.bmp')
Parent:=InfoButton
end;
end;
end;
Автор: nOobCrafter
Дата сообщения: 10.03.2009 17:35
XЧестно порылся в поиске, но нашел только похожий на мой вопрос:
http://forum.ru-board.com/topic.cgi?forum=5&active=&topic=27438&start=1600
спрашивал Gizer, но внятного ответа так и небыло дано, хотя мне кажеться что в этом ничего сложного для знающего человека нет(

Цитата:
День добрый, возникла надобность дописать режим обновления для инсталяшки, сами галочки сделать и т.д. проблем нету, вопрос вот в чем, как можно указать что устанавливать нужно только определенные файлы из всей кучи, а больше ничего не делать?
Допустим у меня есть набор файлов и папок, при чистой установке копирются все папки и файлы, а при обновлении только несколько файлов, все это для того чтобы уменьшить размер дистрибутива, а не пихать по разным папкам (а так же не создавать компонент которому присваивать отдельно эти пару файлов %)), а в установке при выборе обновления просто копировать нужные файлы из диструбтива.
примерно у меня папка cодержимое папки при чистой установке образно:
___________________________________________________
Установочная папка > data\audio\setting\redme.txt\proga.exe

при обновлении:
___________________________________________________
Установочная папка > proga.exe\readme.txt

Вот живой пример организации:

Код:Source: C:\777\guard\*; DestDir: {app}\777\Guard; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a
Source: C:\777\access\*; DestDir: {app}\777\Access; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b



надо пару файлов из одной папки и пару из другой.. Уфф..надеюсь обьяснил подробней некуда %)).
Автор: DeKaNszn
Дата сообщения: 10.03.2009 18:25
nOobCrafter

[no][Files]
Source: C:\777\guard\*; DestDir: {app}\777\Guard; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a; Check: checking(false)
Source: C:\777\access\*; DestDir: {app}\777\Access; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b; Check: checking(true)

[Code]
var
isUpdate:boolean;{если выбрано обновление - присвоить true}

function checking(param: boolean):boolean;
begin
If not isUpdate
Then Result:=true
Else Result:=param;
end;[/no]
Автор: nOobCrafter
Дата сообщения: 10.03.2009 18:48
DeKaNszn
Спс большое, это уже лучше, но все же проблема несколько нерешена, как мне все же указать конкретные файлы которые надо скопировать?..
Автор: alfonser
Дата сообщения: 10.03.2009 19:34

Цитата:
Цитата:
Подскажите, пожалуйста!
Удаляю файлы:
DeleteFile('{win}\xxx.dll');
Но как сделать, чтобы это удаление происходило именно в конце установки?
Спасибо!

Добавь Flags: postinstall

Как это добаввить в секции [Code]?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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