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

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

Автор: sjwrec
Дата сообщения: 20.01.2016 08:45
MihailM
Да, я вас прекрасно понимаю, у самого так когда что-то не получается. Но по вашей ошибке, я удивлён не меньше вашего. Ведь у меня этот код работал как часики. И не было сообщений от пользователей, что путь неправильно находит или сообщениях об ошибках.
Автор: MihailM
Дата сообщения: 20.01.2016 11:35
sjwrec, да я уже и версии InnoSetup-a переустанавливал AnSI , и другую версию UNICODE . Все равно так же.
p.s. и спасибо , за вашу версию . Опробуем отпишусь .
Автор: frost745
Дата сообщения: 20.01.2016 19:46
подскажите, что нужно прописать в деинсталляторе, чтобы при удалении программы удалялись бы её настройки хранящиеся в реестре (короче чтобы удалялась ветка реестра [HKEY_CURRENT_USER\Software\My program])
а то всё удаляется, а эта штука остаётся в реестре.
Автор: sjwrec
Дата сообщения: 21.01.2016 08:41
frost745

Код:
[Registry]
Root: HKCU; SubKey: Software\My program; Flags: uninsdeletekey
Автор: frost745
Дата сообщения: 21.01.2016 10:54
sjwrec
спасибо. буду пробовать, а то недоделки нам не нужны.
Автор: FONT_Studio
Дата сообщения: 27.01.2016 20:58
[more] Помогите пожалуйста. Проблема "проверки присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения"...

Проблема в том что проверка происходит НЕ В УКАЗАННОЙ МНОЙ ПАПКЕ (на странице выбора), а в папке которая прописана по умолчанию в секции [Setup], DefaultDirName={pf}

Использую данный код:

function NextButtonClick(CurPage: Integer): Boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
If CurPage=7 then
//Проверка присутствия определенных файлов в папке с установленной программой на странице выбора папки назначения
begin
If (FileSearch('My.exe', ExpandConstant('{app}'))='')
then
begin
s:='Извините, в директории '+ExpandConstant('{app}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.';
MsgBox(s, mbError, mb_Ok);
Result:= False
end
end;
end;
end. [/more]
Автор: sjwrec
Дата сообщения: 28.01.2016 11:11
FONT_Studio
[more=А если так]

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = wpSelectDir then begin
If not
FileExists(ExpandConstant('{app}\My.exe')) then begin
MsgBox('Извините, в директории '+ExpandConstant('{app}')+'' #13 'не обнаружены файлы, подтверждающие подлинность программы.' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.', mbError, mb_Ok);
Result:= False;
end;
end;
end;


[/more]
Автор: FONT_Studio
Дата сообщения: 28.01.2016 18:28
sjwrec

Короче нашел в чем проблема, данный код (проверки наличия файла), не корректно работает с кодом "позволяющим, менять местами страницы выбора компонентов и выбора пути установки"

Все, благодарю, проблему (с компонентами) решил с помощью данного кода Пример написания выбора установки (например - русской версии игрушки) через RadioButton
Автор: sjwrec
Дата сообщения: 28.01.2016 22:08
FONT_Studio
А что с wpReady не правильно мой код работает? Можете ещё проверить с wpSelectProgramGroup

Или у вас просто эта страница wpReady выключена?

Код:
[Setup]
DisableReadyPage=yes

Автор: FONT_Studio
Дата сообщения: 28.01.2016 22:28
sjwrec

wpReady - это я просто страницу на которой начинается поиск файла, изменил. У вас поиск файла начинался на странице выбора папки, а мне просто нужно было чуть позже.

Если позволите еще вопросик:
1) Можно, как-то, через ваш код, реализовать поиск разных файлов, для разных компонентов (если выбираю один компонент - ищет один файл; если выбираю другой компонент - ищет другой файл)?

2) И как реализовать поиск "пути установки" через реестр, для каждого компонента (если выбираю один компонент - ищет один путь через реестр; если выбираю другой компонент - ищет другой путь через реестр)? Где-то, когда-то видел, но что-то не могу найти...
Автор: sjwrec
Дата сообщения: 29.01.2016 11:42
FONT_Studio
А это действительно необходимо, чтобы у каждого компонента был свой путь установки?
Или компоненты ставятся по одному пути, просто в разные папки в нём?

Поиск разных файлов в зависимости от компонента можно сделать, только я забыл что надо в If передавать. Что-то вроде If ComponentSelected - точно не помню.. then begin
If not FileExists(ExpandConstant('{app}\My.exe')) then begin ...

[more=Поиск пути через реестр]

[Setup]
DefaultDirName={code:AvPatch}

[_code]
var
AvRes: String;

// Начало Процедура "Определение местонахождения"
function AvPatch(Default: String): String;
begin
// Ищем ключ
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 264710','InstallLocation', AvRes);
// Если не удалось найти ключ Wow6432Node (для 64 битных систем), то пробуем искать ключ для 32 битных систем.
if AvRes = '' then RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 264710','InstallLocation', AvRes);
if AvRes = '' then Result:= 'C:\Games\Subnautica'; // Если ни один ключ не найден то используем альтернативный путь
if AvRes <> '' then Result:= AvRes; // Если путь найден то записываем его результат.
end;
// Конец Процедура "Определение местонахождения"

[/more]
Автор: elmorte
Дата сообщения: 30.01.2016 03:51
sjwrec

Уже 3 часов мучаюсь, и стоило зайти на ru-board - половина проблемы решена, как минимум вижу, что не только у меня проблема.

Я перерыл все варианты получения DefaultDirName при следующих условиях - мне нужно найти путь в реестре и потом по этому пути проверить наличие папки или файла. Речь идет о моде для лицензии в Steam, только эта игра не создает записей в реестре вообще! Соответственно мне нужно собрать DefaultDirName из полученного пути из реестра, а потом по найденному пути проверить наличие исполняемого файла. Если же не найдено - предложить несколько популярных папок на выбор и если они не найдены, то уже предложить пользователю указать папку установки.

т.е. как то так:
если путь в реестре и файл есть - то подставить в DefaultDirName такое - то значение (собранное из двух элементов).
если нет, то проверить путь 1, путь 2, путь 3 и т.д. если путь не найден, то предложить выбрать папку.

Заранее спасибо.
Автор: audiofeel74
Дата сообщения: 30.01.2016 10:06
помогите, не пойму в чем подвох, размер фона 455х340
procedure CreateControls;
begin
Fon1 := ImgLoad(WizardForm.Handle, 'fon1.png', ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, False, True);
-
размер инсталла точно такой же
procedure InitializeWizard;
begin
with WizardForm do begin
BorderStyle := bsNone;
ClientWidth := ScaleX(455);
ClientHeight := ScaleY(340);
но форма инно торчит снизу на три миллиметра, ну и естественно с права
первый раз такое
Автор: ultimo
Дата сообщения: 30.01.2016 10:31
audiofeel74
проблема в BorderStyle := bsNone;

Если указать так

Fon1 := ImgLoad(WizardForm.Handle, 'fon1.png', ScaleX(0), ScaleY(0), WizardForm.Width, WizardForm.Height, False, True);

with WizardForm do begin
BorderStyle := bsNone;
Width := ScaleX(455);
Height := ScaleY(340);

то должно все быть ОК.
Автор: audiofeel74
Дата сообщения: 30.01.2016 11:13
ultimo
не помогло,
я принялся отматывать назад все что "прикручивал" и дошел до VCLStyle
из за него так делается,
может как то по другому можно сделать BorderStyle := bsNone; ??
Автор: ultimo
Дата сообщения: 30.01.2016 12:04
audiofeel74
Можно сделать BorderStyle := bsSingle или вообще удалить эту строку)

Не понимаю, в чем проблема. Сам проверил VCLStyle и параметр BorderStyle := bsNone, и все нормально.
Автор: FONT_Studio
Дата сообщения: 30.01.2016 16:13
sjwrec

Цитата:
А это действительно необходимо, чтобы у каждого компонента был свой путь установки?


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

Просто хотел создать компактный установщик. Да ладно, сделаю два инсталлятора...

Знаю, что способ реализации 100% есть, т.к. инсталляционный файл остался, а вот скрипт посеял (и не как не могу связаться с тем у кого брал скрипт)...

sjwrec Спасибо за помощь!!!!
Автор: audiofeel74
Дата сообщения: 30.01.2016 17:05
ultimo

Цитата:
Можно сделать BorderStyle := bsSingle или вообще удалить эту строку)
 
Не понимаю, в чем проблема. Сам проверил VCLStyle и параметр BorderStyle := bsNone, и все нормально.

посмотри если есть время, может это у меня что то с темой в Windows (стоит Win 10.14251)
я его добавил что бы "украсить" формы "отмена" "выбор папки" и тд, он просто похож на графику
по стилю очень сильно, (так что бы не заморачиваться)
https://yadi.sk/d/jhdgy-RpnzNs8
Автор: ultimo
Дата сообщения: 30.01.2016 18:12
audiofeel74
Действительно, фактический размер окна 457x343, а изображение 455x340. Без VCLStyle пробовал?
Автор: audiofeel74
Дата сообщения: 30.01.2016 18:31
ultimo
да пробовал, без нее все нормально, я Inno и Unicode ставил и Ansi, без разницы
Автор: FONT_Studio
Дата сообщения: 31.01.2016 02:20
Народ, а можно как-то, сделать файл unins000.dat (unins000.exe) системным (невидимым при обычных условиях)???
Автор: elmorte
Дата сообщения: 31.01.2016 20:28
Добрый вечер. Не могу победить элементарную задачу - найти и заменить текст в файле.

Перепробовал кучу примеров и со stackoverflow, oszone, пример из шапки - ни один не помог полностью решить задачу.

Буду признателен за помощь.

Мой случай ниже.

Есть С:\file.txt c cодержимым:

Код:
data textures=true
language="english"
settings ai=false
Автор: usermode
Дата сообщения: 31.01.2016 21:39
elmorte
а формат файла случайно не INI? раз:
data textures=true
language="english"
settings ai=false
то судя по всему так и есть, тогда тебе поможет функция:
SetIniString
чтобы не изобретать очередной велосипед.
Автор: sjwrec
Дата сообщения: 01.02.2016 15:58
elmorte

Цитата:
Задача минимум - найти в файле С:\file.txt текст language="english" и заменить на language="russian"

[more]
Возможно что файл INI.
Тогда для этого достаточно секции [INI] которая существует специально для этого.

Допустим что ключевая секция файла Settings, тогда всё будет выглядеть так:


Код:
[INI]
Filename: "C:\File.txt"; Section: "Settings"; Key: "language"; String: "russian"

Автор: audiofeel74
Дата сообщения: 02.02.2016 01:13
как сделать чтоб при разворачивании на весь экран (или изменение размера окна при помощи мышки в ручную) кнопки и прочее Controls не оставались там же а меняли координаты ? (для начала мне бы это все осилить без Botva)
я понял так что координаты у меня привязаны к границе Wizard ( к левой ест.) )
BorderStyle := bsSizeable;
Автор: nik1967
Дата сообщения: 03.02.2016 09:02
FONT_Studio,
[more]
Код: [Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Code]
type
#ifdef UNICODE
PChar = PAnsiChar;
#endif

function SetFileAttributes(lpFileName: PChar; dwFileAttributes: DWORD): BOOL; external 'SetFileAttributesA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then begin
SetFileAttributes(PChar(ExpandConstant('{app}\unins000.dat')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM);
SetFileAttributes(PChar(ExpandConstant('{app}\unins000.exe')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM);
end;
end;
Автор: FONT_Studio
Дата сообщения: 04.02.2016 21:06
nik1967 благодарю!!!


ВОПРОС
А можно при удалении программы выбирать компоненты (выбрать какой компонент удалять).

Например, при установке мы выбрали 4 компонента, а при деинсталляции, предоставить пользователю возможность выбрать , какие из компонентов он хочет удалить...
Автор: MihailM
Дата сообщения: 05.02.2016 22:08
sjwrec , нужна помощь .. Как генерировать типа пароля или просто набор букв цифр .
А потом его подставить в текстовое окно и записать в файл . Такое нужно 2 раза . 2 раз чтобы через кнопку срабатывало . Такое можно сворганить в InnoSetup ?
p.s. это нужно для странички , типа CreateNickName ..
Автор: usermode
Дата сообщения: 05.02.2016 22:40

Цитата:
Как генерировать типа пароля или просто набор букв цифр.

типа кейген на Inno?

простенький пример:
[more=n1]
; крякми не поддерживает символы и цифры в имени, если вставить через Ctrl + A или Shift + Ins, киген генерит, но обработка такого имени в крякми не предусмотрен
[Setup]
AppName=Keygen for CrackMe v1.0 by Cruehead
AppVerName=Keygen for CrackMe v1.0 by Cruehead
DefaultDirName={tmp}
VersionInfoDescription=Keygen for CrackMe v1.0 by Cruehead
OutputBaseFilename=CM.1.0.CRU.KG

[Messages]
SetupAppTitle=CM.1.0.CRU.KG

[LangOptions]
DialogFontName=Tahoma
DialogFontSize=8

[Code]
const
maxChar = 10;

var
h: Longint;
pass,sn: String;
Form: TSetupForm;
Pwd,PwdNew: TMemo;
str: string;

opStr,snStr:TNewStaticText;
ExitButton,GenerateButton: TButton;

procedure CheckDigits(Sender: TObject; var Key: Char);
begin
if ( (Key = '1') or (Key = '2') or (Key = '3') or (Key = '4')
or (Key = '5') or (Key = '6') or (Key = '7') or (Key = '8')
or (Key = '9') or (Key = '0') or (Key = ' ') or (Key = '~')
or (Key = '`') or (Key = '!') or (Key = '@') or (Key = '"')
or (Key = '#') or (Key = '№') or (Key = '^') or (Key = ':')
or (Key = ';') or (Key = '.') or (Key = '/') or (Key = '*')
or (Key = '$') or (Key = '%') or (Key = '&') or (Key = '(')
or (Key = ')') or (Key = '-') or (Key = '_') or (Key = '=')
or (Key = '|') or (Key = '\') or (Key = '<') or (Key = '>')
or (Key = ',') or (Key = '{') or (Key = '}') or (Key = '[')
or (Key = ']') or (Key = '+') or (Key = '?') or (Key = '''')) then
begin
Key:=#0;
Beep;
PwdNew.Text:='Error! Only letters are allowed!';
Pwd.Text:='';
end;
end;

procedure Generate;
var
s,str: string;
byt: byte;
i,i2: integer;
begin
if Pwd.Text = '' then
begin
PwdNew.Text := 'Enter your name...';
end else
begin
str := Pwd.Text;
str := Uppercase(str);
i := 0;
repeat // запускаем цикл, в котором посимвольно конвертим имя в hex
i := i + 1; // inc ecx
if i <= 10 then // выполняем калькуляцию байтов при условии, что имя содержит до 10 символов
begin
byt := Ord(str[i]); // переводим каждый полученый байт в hex
i2 := i2 + byt; // складываем значения каждого полученного байта
if not ((StrGet(str, i)>='A') and (StrGet(str, i)<='Z')) then // если засекаем алфавит, отличный от английского, делаем побайтный sub 20
i2 := i2 - $20;
end;
until i >= Length(str); // цикл завершается, когда количество символов в имени равно или больше его длины

i2 := i2 xor $5678 xor $1234; // получаем серийник, супер нехитрые вычисления

PwdNew.Text := IntToStr(i2);
end;
end;

procedure GenerateSerial (Sender: TObject);
begin
Generate;
end;

function ShowKeygenForm(): Boolean;
begin
Result := True;
Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(210);
Form.ClientHeight := ScaleY(112);
Form.Caption := 'Keygen for CrackMe v1.0 by Cruehead';
Form.BorderIcons := [biMinimize];
Form.BorderStyle := bsToolWindow;
Form.Center;

opStr := TNewStaticText.Create(Form);
opStr.Parent := Form;
opStr.Width:= 38;
opStr.Top := 6;
opStr.Left := 8;
opStr.Caption := 'Super name:';

snStr := TNewStaticText.Create(Form);
snStr.Parent := Form;
snStr.Width:= 38;
snStr.Top := 46;
snStr.Left := 8;
snStr.Caption := 'Super serial:';

Pwd := TMemo.Create(Form);
Pwd.Parent := Form;
Pwd.Width := ScaleX(195);
Pwd.Height := ScaleY(18);
Pwd.Left := ScaleX(7);
Pwd.Top := ScaleY(24);
Pwd.Text := '';//ExpandConstant('{username}');
Pwd.WantReturns :=false;
Pwd.WordWrap:=false;
// Pwd.MaxLength:=maxChar;
// Pwd.Alignment:=taCenter;
Pwd.OnKeyPress:=@CheckDigits;

PwdNew := TMemo.Create(Form);
PwdNew.Parent := Form;
PwdNew.Width := ScaleX(195);
PwdNew.Height := ScaleY(18);
PwdNew.Left := ScaleX(7);
PwdNew.Top := ScaleY(64);
PwdNew.WantReturns :=false;
PwdNew.WordWrap:=false;
// PwdNew.Alignment:=taCenter;

GenerateButton := TButton.Create(Form);
GenerateButton.Parent := Form;
GenerateButton.Width := ScaleX(93);
GenerateButton.Height := ScaleY(20);
GenerateButton.Left := ScaleX(8);
GenerateButton.Top := ScaleY(92);
GenerateButton.Caption := 'Generate';
GenerateButton.OnClick := @GenerateSerial;
GenerateButton.Default := true;

ExitButton := TButton.Create(Form);
ExitButton.Parent := Form;
ExitButton.Width := ScaleX(93);
ExitButton.Height := ScaleY(20);
ExitButton.Left := ScaleX(109);
ExitButton.Top := ScaleY(92);
ExitButton.Caption := 'Exit';
ExitButton.ModalResult := mrOk;
ExitButton.Default := true;

Form.ActiveControl := ExitButton;

if Form.ShowModal() = mrOk then
begin
Result := True;
end;
finally
Form.Free();
end;
end;

function InitializeSetup(): Boolean;
begin
Result:=True;
h:=FindWindowByWindowName('Keygen for CrackMe v1.0 by Cruehead');
if h<>0 then
begin
Result:=False;
end else
begin
ShowKeygenForm;
Result:=False;
end;
end;

[/more]
[more=n2][Setup]
AppName=Keygen for Splish CrackMe
AppVerName=Keygen for Splish CrackMe
DefaultDirName={tmp}
VersionInfoDescription=Keygen for Splish CrackMe
OutputBaseFilename=SPLISH.KG

[Messages]
SetupAppTitle=SPLISH.KG

[LangOptions]
DialogFontName=Tahoma
DialogFontSize=8

[Code]
const
maxChar = 10;

var
h: Longint;
pass,sn: String;
Form: TSetupForm;
Pwd,PwdNew: TMemo;
str: string;

opStr,snStr:TNewStaticText;
ExitButton,GenerateButton: TButton;

function NumToHex(b: BYTE): string;
begin
Result := Format('%.2x', [b]);
end;

procedure CheckDigits(Sender: TObject; var Key: Char);
begin
if ( (Key = '1') or (Key = '2') or (Key = '3') or (Key = '4')
or (Key = '5') or (Key = '6') or (Key = '7') or (Key = '8')
or (Key = '9') or (Key = '0') or (Key = ' ') or (Key = '~')
or (Key = '`') or (Key = '!') or (Key = '@') or (Key = '"')
or (Key = '#') or (Key = '№') or (Key = '^') or (Key = ':')
or (Key = ';') or (Key = '.') or (Key = '/') or (Key = '*')
or (Key = '$') or (Key = '%') or (Key = '&') or (Key = '(')
or (Key = ')') or (Key = '-') or (Key = '_') or (Key = '=')
or (Key = '|') or (Key = '\') or (Key = '<') or (Key = '>')
or (Key = ',') or (Key = '{') or (Key = '}') or (Key = '[')
or (Key = ']') or (Key = '+') or (Key = '?') or (Key = '''')) then
begin
Key:=#0;
Beep;
PwdNew.Text:='Error! Only letters are allowed!';
Pwd.Text:='';
end;
end;

procedure Generate;
var
s,str: string;
byt: byte;
i,i2,idiv,i3: integer;
begin
if Pwd.Text = '' then
begin
PwdNew.Text := 'Enter your name...';
end else
begin
str := Pwd.Text;
PwdNew.Text := ''; //
i := 0;
repeat
i := i + 1;

byt := Ord(str[i]);

i2 := byt div $A;
i3 := i2 * $A;
idiv := byt - i3;

i2 := idiv xor (i - 1);
i2 := i2 + 2;

if (i2 >= $A) then
begin
i2 := i2 - $A
end;
i2 := i2 + 2;
begin
s := IntToStr(i2);
i3 := StrToInt('2');
if i3 = Length(s) then
Delete(s,1,1);
end;

PwdNew.Text := PwdNew.Text + s;

until i >= Length(str); // цикл завершается, когда количество символов в имени равно или больше его длины
end;
end;

procedure GenerateSerial (Sender: TObject);
begin
Generate;
end;

function ShowKeygenForm(): Boolean;
begin
Result := True;
Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(210);
Form.ClientHeight := ScaleY(112);
Form.Caption := 'Keygen for Splish CrackMe';
Form.BorderIcons := [biMinimize];
Form.BorderStyle := bsToolWindow;
Form.Center;

opStr := TNewStaticText.Create(Form);
opStr.Parent := Form;
opStr.Width:= 38;
opStr.Top := 6;
opStr.Left := 8;
opStr.Caption := 'Super name:';

snStr := TNewStaticText.Create(Form);
snStr.Parent := Form;
snStr.Width:= 38;
snStr.Top := 46;
snStr.Left := 8;
snStr.Caption := 'Super serial:';

Pwd := TMemo.Create(Form);
Pwd.Parent := Form;
Pwd.Width := ScaleX(195);
Pwd.Height := ScaleY(18);
Pwd.Left := ScaleX(7);
Pwd.Top := ScaleY(24);
Pwd.Text := ExpandConstant('{username}');
Pwd.WantReturns :=false;
Pwd.WordWrap:=false;
// Pwd.MaxLength:=maxChar;
// Pwd.Alignment:=taCenter;
// Pwd.OnKeyPress:=@CheckDigits;

PwdNew := TMemo.Create(Form);
PwdNew.Parent := Form;
PwdNew.Width := ScaleX(195);
PwdNew.Height := ScaleY(18);
PwdNew.Left := ScaleX(7);
PwdNew.Top := ScaleY(64);
PwdNew.WantReturns :=false;
PwdNew.WordWrap:=false;
// PwdNew.Alignment:=taCenter;
PwdNew.ReadOnly:=True;

GenerateButton := TButton.Create(Form);
GenerateButton.Parent := Form;
GenerateButton.Width := ScaleX(93);
GenerateButton.Height := ScaleY(20);
GenerateButton.Left := ScaleX(8);
GenerateButton.Top := ScaleY(92);
GenerateButton.Caption := 'Generate';
GenerateButton.OnClick := @GenerateSerial;
GenerateButton.Default := true;

ExitButton := TButton.Create(Form);
ExitButton.Parent := Form;
ExitButton.Width := ScaleX(93);
ExitButton.Height := ScaleY(20);
ExitButton.Left := ScaleX(109);
ExitButton.Top := ScaleY(92);
ExitButton.Caption := 'Exit';
ExitButton.ModalResult := mrOk;
ExitButton.Default := true;
Generate;
Form.ActiveControl := ExitButton;

if Form.ShowModal() = mrOk then
begin
Result := True;
end;
finally
Form.Free();
end;
end;

function InitializeSetup(): Boolean;
begin
Result:=True;
h:=FindWindowByWindowName('Keygen for Splish CrackMe');
if h<>0 then
begin
Result:=False;
end else
begin
ShowKeygenForm;
Result:=False;
end;
end;

[/more]
Автор: MihailM
Дата сообщения: 06.02.2016 00:03
usermode , слишком громоздкие .по проще нельзя типа брать из массива . Типа такого "йцукенгшщзфывапролджэячсмитьбю." и по позиции уже подставлять !

Цитата:
типа кейген на Inno?
Нет генератор пароля !
А так спасибо за отклик .
Вот еще , а можно перед установкой при выборе определенного компонента - переименовать файл , который находится уже на диске . Нашел , только как переименновать , файл который в инсталяторе . А мне надо наоборот .
Возможно это как сделать ?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


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