Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]


Страниц : 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

actavir
21-12-2010, 22:45
Подскажите пожалуйста как сделать деинсталятор игры через инно. Просто родной не хочет работать?
Лучше если скрипт будет удалять игру полностью.
Заранее спасибо.

nik1967
22-12-2010, 00:31
actavir,
Что значит "родной не хочет работать?" Попробуй добавить в скрипт до секции [_Code] такие строчки:
[UninstallDelete]
Type: filesandordirs; Name: {app}

R.i.m.s.k.y.
22-12-2010, 09:44
Попробуй добавить в скрипт до секции [_Code] »
помоему порядок расположения секций в скрипте не имеет значения, у инно жеский порядок выполнения секций независимо от их местоположения.
Просто родной не хочет работать »
вы просто из папки Source удалили unins*.exe?

как через Inno Setup реализовать автоматическую активацию игр »
Активация игры - это или запись в реестре или файлы в users... Соответсвенно вылавливаем эту активизацию через RegShot.

aerh
22-12-2010, 12:35
Помогите, как сделать так, чтобы программа Filename: "{src}\programm.exe"; запускалась не в конце установки, а на второй странице??

Raf96
22-12-2010, 14:13
Активация игры - это или запись в реестре или файлы в users... Соответсвенно вылавливаем эту активизацию через RegShot. »
да но тогда зачем делать выбор активировать игру или нет если можно молча всё сделать

actavir
22-12-2010, 14:15
Можете скинуть полную версию скрипта на удаление. У меня где то ошибка но не могу найти где!!!

R.i.m.s.k.y.
22-12-2010, 16:06
Можете скинуть полную версию скрипта на удаление »
скрипт на удаление он в самом скрипте - просто указываете флаги соответствующие.
У меня где то ошибка но не могу найти где »
ну давайте скрипт, кстати вы не ответили на мой вопрос - файл unins*.exe в папке источника есть?

Помогите, как сделать так, чтобы программа Filename: "{src}\programm.exe"; запускалась не в конце установки, а на второй странице »
второй странице это какой? ввод пароля? выбор компонентов? выбор папки? страницы в инно отключаемые и вторая страница у всех разная.
В общем пишу для окна компонентов, а там уже подменить на требуемое просто

[_Code]
procedure CurPageChanged(CurPageID: Integer);
var res:integer;
If CurPageID=wpSelectComponents then
begin
Exec(ExpandConstant('{src}\programm.exe'), ' параметры ',ExpandConstant('{src}'),SW_HIDE,ewWaitUntilTerminated,res);
end;
end;

CurPageID может принимать значения: wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

actavir
22-12-2010, 16:30
ну давайте скрипт, кстати вы не ответили на мой вопрос - файл unins*.exe в папке источника есть? »
нет


[Setup]
AppName=Александр
AppVerName=Александр (2010)
DefaultDirName={pf}\Alexander
DefaultGroupName=Александр
AllowNoIcons=true
OutputBaseFilename=Alexander Setup
OutputDir=S:\[REPACKs]\Alexander\


UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=no

Uninstallable = yes
UninstallDisplayIcon=D:\alexander.ico
UninstallIconFile=D:\alexander.ico
UninstallFilesDir={app}
UninstallLogMode=append
UninstallStyle=modern



Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
DiskSpanning=true
DiskSliceSize=1048576000
WizardImageFile=D:\image.bmp
WizardSmallImageFile=D:\imagesmall.bmp

SetupIconFile=D:\alexander.ico


[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Играть в Александр"; Filename: "{app}\dmln.exe"; WorkingDir: "{app}";
Name: "{group}\Все файлы для игр"; Filename: "http://www.play-game-ru.ucoz.ru/"; WorkingDir: "http://";
Name: "{group}\Удалить Александр"; Filename: "{uninstallexe}"; WorkingDir: "{app}";
Name: "{userdesktop}\Александр"; Filename: "{app}\dmln.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\Все файлы для игр"; Filename: "http://www.play-game-ru.ucoz.ru/"; WorkingDir: "http://";

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


[UninstallDelete]
Type: filesandordirs; Name: {app}



это только нужная часть там внизу ещё есть рашифровка фриакра и установка директа
вот чёто не получается ничё

и ещё вопрос как сделать так что бы после окончания установки рабочий стол автоматически обновлялся так как ярлык создаваемый перед распаковкой является безликим?

gur74
22-12-2010, 17:08
Спецы помогите пожалуйста начинающему не проигрывается музыка вот скрипт:



[Setup]
AppName=LikeRusXP Localization
AppVerName={cm:NameAndVersion,LikeRusXP Localization,6.01.12}
AppVersion=6.01.12
DefaultDirName={pf}\LikeRusXP Localization
DefaultGroupName=LikeRusXP Localization
OutputBaseFilename=LikeRusXP 6.01.12
Compression=lzma
LicenseFile=embedded\License.txt
InfoBeforeFile=embedded\InfoBefore.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
SetupIconFile={tmp}\MAINICON.ico

[Files]
Source: "{tmp}\isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "{tmp}\Splash.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "{app}\bass.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "{app}\sound.mp3"; DestDir: "{tmp}"; Flags: dontcopy
Source: "{tmp}\ISSkin.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Codejock.cjstyles"; DestDir: "{app}"; Flags: dontcopy
Source: "{app}\LikeRusXP.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\limage.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\LikeRusXP.chm"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\License.txt"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0;
Source: "{app}\Store\elibrary.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lresdumper.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\sl3core.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lires.exe"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\lresdumper.dll"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\ResBinder.exe"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\readme.txt"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\english.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\russian.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;

[Icons]
Name: "{group}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:ProgramOnTheWeb,LikeRusXP 6.01.12}"; Filename: "http://likerusxp.ru/"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:UninstallProgram,LikeRusXP 6.01.12}"; Filename: "{uninstallexe}"; MinVersion: 4.1.2222,5.0;
Name: "{commondesktop}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; Tasks: "desktopicon"; MinVersion: 4.1.2222,5.0;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\LikeRusXP"; Filename: "{app}\LikeRusXP.exe"; Tasks: "quicklaunchicon"; MinVersion: 4.1.2222,5.0;

////////////////////// Skin //////////////////////

[Code_]
#ifdef UNICODE
#define PStr "AnsiString"
#else
#define PStr "String"
#endif

procedure LoadSkin(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Codejock.cjstyles');
CreateDir(ExpandConstant('{sd}\ISSkin'));
FileCopy(ExpandConstant('{tmp}\Codejock.cjstyles'), ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), True);
LoadSkin(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), 'NormalBlack.ini');

Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
DeleteFile(ExpandConstant('{sd}\ISSkin\isskin.dll'));
DeleteFile(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'));
RemoveDir(ExpandConstant('{sd}\ISSkin'));
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), True);
FileCopy(ExpandConstant('{app}\Codejock.cjstyles'),
ExpandConstant('{tmp}\Codejock.cjstyles'), True);

LoadSkinUninst(ExpandConstant('{tmp}\Codejock.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

////////////////////// Musik //////////////////////

[Code_]
//большее указание смотрите в дельфийских исходниках в архиве с библиотекой
const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard2();
var
Name1: string;
i: Integer;
begin
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('sound.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\sound.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup2();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

procedure CurStepChanged2(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

////////////////////// Splash //////////////////////

[Code_]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

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

[Run]
Filename: "{app}\LikeRusXP.exe"; Description: "{cm:LaunchProgram,LikeRusXP}"; Flags: nowait postinstall skipifsilent

R.i.m.s.k.y.
22-12-2010, 17:32
вот чёто не получается ничё »
что конкретно? у вас в скрипте прогу распаковывает внешний распаковщик, так что при удалении надо сносить папку {app} как правильно подсказали через [UninstallDelete]
можно еще через код сносить папки
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then RemoveDir(ExpandConstant('{app}'));
end;
как сделать так что бы после окончания установки рабочий стол автоматически обновлялся »
[Setup]
ChangesAssociations=true
ChangesEnvironment=true
ярлык создаваемый перед распаковкой является безликим »
[Icons]
Name: "{group}\Играть в Александр"; Filename: "{app}\dmln.exe"; WorkingDir: "{app}"; IconFilename: "{app}\dmln.exe"; IconIndex: 1

actavir
22-12-2010, 20:00
R.i.m.s.k.y., огромное спасибо!!!

aerh
22-12-2010, 20:09
R.i.m.s.k.y., спасибо, всё работает)


У меня еще один вопрос. Как в область, которая выделена на изображении, добавить текст?
http://s52.radikal.ru/i136/1012/88/93f4ad87f62b.png

Вот код


;-------CD-Key------------

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKLM; SubKey: SOFTWARE\Activision\Call of Duty 4; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Activision\Call of Duty 4; ValueType: string; ValueName: codkey; ValueData: {code:edtText}; Flags: uninsclearvalue

[Code]
var
edt:array [1..5] of TEdit;
txt: TNewStaticText;
i, e, t: integer;
NewPage: TWizardPage;
lbl: TLabel;
procedure CurPageChanged1(CurPageID: Integer);
begin
if CurPageID = NewPage.ID then
end;


function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var //
// s: string; //
begin
{ получаем текст из edit'ов и присваем переменной s }
for i:= 1 to 5 do begin
s:= s + edt[i].Text;
end;
{ удаляем лишний знак тире в конце строки }
s:= Copy(s, 1, Length(s) - 1);
Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
// If CurStep = ssDone then
// RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
// Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... :) }
// If CurUninstallStep = usDone then
// RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
for i:= 1 to 4 do begin

end; end;


procedure SerialPage;
begin
NewPage:= CreateCustomPage(wpWelcome, 'Ввод кюча (CD-key)', 'Ключ диска нужен для игры по интернету');

WizardForm.NextButton.Enabled:= False;
t:= 57;
e:= t;
// создаём Label
lbl:=TLabel.Create(NewPage);
with lbl do begin
Left:= 0;
Top:= 0;
Width:= 417;
Height:= 28;
AutoSize:= False;
WordWrap:= True;
Caption:= 'Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска';
Parent:= NewPage.Surface;
end;



// создаём 5 edit'ов
for i:= 1 to 5 do begin
edt[i]:= TEdit.Create(NewPage);
with edt[i] do begin
Parent:= NewPage.Surface;
Left:= 0 + (e*i);
Top:= 47;
Width:= 47;
Height:= 21;
MaxLength:= 4;
OnKeyPress:= @edtKeyPress;

end;
end;
end;



procedure InitializeWizard();
begin
SerialPage;
end;

R.i.m.s.k.y.
22-12-2010, 20:18
R.i.m.s.k.y., огромное спасибо!!! »
R.i.m.s.k.y., спасибо, всё работает) »
Давим внизу сообщения "Полезное сообщение"
Как в область, которая выделена на изображении, добавить текст? »
В шапке Inno form Designer
В нем формы рисуются как в ворде (ну почти)

John1992on
22-12-2010, 23:38
Привет, я уже принципиально разобрался в Inno Setup, но не понимаю, как сделать(пробовал в ISTool) такое:

1) Программа установки должна спрашивать желаемый язык, но реализация данного действия осуществляется копированием одного из нескольких языковых файлов в определенную папку с установленной программой. Что для этого нужно сделать?

2) Возможно ли сделать установку 2 в 1: типа установщик установит 2 программы в разные места - например есть программа "пр1" и "пр2", при запуске инсталятора он отображает 2 строки с выбором пути установки:
1. Устновка ПР1; Обзор
2. Устновка ПР2; Обзор

Заранее спасибо, за ответы любого содержания, сори если повторился, т.е. искал но подобной инфы не нашел.

Duality
23-12-2010, 08:44
Подскажите как сделать в инсталляторе "невозможность установки в определенный каталог" (в частности в program files - желательно с выводом сообщения или просто вывод сообщения о нежжелательности/невозможности установки в program files.

Duality
23-12-2010, 10:20
и еще, как добавить несколько функций в скрипт

вот скрипт - при такой компиляции выдает ошибку на дублирование функиций " NextButtonClick", "CurPageID" ....


[Code]
var
text: TLabel;

function NextButtonClick(CurPageID: Integer): Boolean;
var
i, n: Integer;
str: string;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
str:= WizardForm.DirEdit.Text;
for i:= 1 to Length(str) do if str[i] = '\' then n:= n + 1;
if (n = 1) and (Pos(ExpandConstant('{pf}\'), WizardForm.DirEdit.Text) > 0) then
begin
text.Caption:= 'Внимание, в "Program Files" устанавливать нельзя.';
Result:= False;
end
else text.Caption:= '';
end;
end;

procedure InitializeWizard();
begin
text:= TLabel.Create(WizardForm);
with text do
begin
SetBounds(WizardForm.DirEdit.Left,120,300,100);
AutoSize:= True;
Font.Style:= [fsBold];
Font.Color:= clRed;
Parent:= WizardForm.SelectDirPage;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if (CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False)
and (IsComponentSelected('d\a') = False) and (IsComponentSelected('d\b') = False)
and (IsComponentSelected('d\c') = False) and (IsComponentSelected('d\d') = False)
and (IsComponentSelected('d\e') = False) and (IsComponentSelected('d\f') = False)
and (IsComponentSelected('d\g') = False) and (IsComponentSelected('d\a') = False) then
begin
MsgBox('Не выбрано ни одиного протокола для установки!!!', mbInformation, MB_OK);
Result := False;
end;
end;



как разделить эти функции ? или сделать невозможность дублирования функций... будет еще ктстаи 3 код для добавления прозрачности Aero к инсталлятру (там тоже дублирование будет, я не знаю как их применять вместе

ChVL
23-12-2010, 11:02
Обычное добавление строки в hosts:
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then
begin
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13 + ' 127.0.0.1 www.site.com', True);
end;
end;
Как прописать удаление этой строки при деинсталляции программы?

R.i.m.s.k.y.
23-12-2010, 11:26
скрипт - при такой компиляции выдает ошибку на дублирование функиций »
Ну а в чем ошибка? естественно не должно быть двух одноименных функций, ошибки тут нет.
как разделить эти функции ? или сделать невозможность дублирования функций »
Элементарно склеить вместе


function NextButtonClick(CurPageID: Integer): Boolean;
var
i, n: Integer;
str: string;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
str:= WizardForm.DirEdit.Text;
for i:= 1 to Length(str) do if str[i] = '\' then n:= n + 1;
if (n = 1) and (Pos(ExpandConstant('{pf}\'), WizardForm.DirEdit.Text) > 0) then
begin
text.Caption:= 'Внимание, в "Program Files" устанавливать нельзя.';
Result:= False;
end
else text.Caption:= '';
end; //CurPageID = wpSelectDir

Result := True;
if (CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False)
and (IsComponentSelected('d\a') = False) and (IsComponentSelected('d\b') = False)
and (IsComponentSelected('d\c') = False) and (IsComponentSelected('d\d') = False)
and (IsComponentSelected('d\e') = False) and (IsComponentSelected('d\f') = False)
and (IsComponentSelected('d\g') = False) and (IsComponentSelected('d\a') = False) then
begin
MsgBox('Не выбрано ни одиного протокола для установки!!!', mbInformation, MB_OK);
Result := False;
end; //(CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False)

end; //NextButtonClick

Duality
23-12-2010, 11:30
Элементарно склеить вместе » ну вот это я как раз и не зналд как сделать....вписал ваш склееный код, ошибка


Compiling [Code] section
---------------------
Compile Error!
Line: 140
Error: Column 11:
Unknown identifier 'text'


а по первому вопросу не подскажете?
Подскажите как сделать в инсталляторе "невозможность установки в определенный каталог" (в частности в program files - желательно с выводом сообщения или просто вывод сообщения о нежжелательности/невозможности установки в program files.

R.i.m.s.k.y.
23-12-2010, 11:33
Как прописать удаление этой строки при деинсталляции программы »
примерно так:

[_code]
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TArrayOfString;
//str : string;
i : Integer;
begin
if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
LoadStringsFromFile(FilePath, S); // загружаем файл
for i:= 0 to GetArrayLength(S)-1 do begin
if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
StringChangeEx(S[i], find, replace, True);
end;
end;
SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then RePlaceTextinFile(ExpandConstant('{sys}\drivers\etc\hosts'), '127.0.0.1 www.site.com', '');
end;


по первому вопросу не подскажете »
знал бы подсказал
ну вот это я как раз и не зналд как сделать....вписал ваш склееный код, ошибка »
а самому догадаться слабо что не хватает var text: TLabel;
я ведь только функцию NextButtonClick склеил, тупо скопировать-вставить.




© OSzone.net 2001-2012