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

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

Автор: Sampron
Дата сообщения: 22.06.2008 23:11
boss911
Попробуй перед каждой DelTree добавить:
WizardForm.StatusLabel.Caption := 'Удаление Folder1... ';
только с разным текстом, может и успеет промелькнуть.

Автор: serg_aka_lain
Дата сообщения: 22.06.2008 23:34
Nekt

Цитата:
мне надо по файленно, для каждого файла отдельная папка.


Тогда просто как обычно

Source: "file.txt"; DestDir: "{app}\gamedata\config"; и.т.д.

И пример поверки присутсвия игры [more]

[_Setup]

DefaultDirName={code:GetInstallPath}


[_Code]

var
InstallPath: String;

function GetInstallPath( AppID: String ): String;
begin
InstallPath := '';
RegQueryStringValue(HKLM, 'SOFTWARE\GSC Game World\STALKER-SHOC','InstallPath', InstallPath);
Result := InstallPath;
end;


function InitializeSetup(): Boolean;
begin
if not RegQueryStringValue(HKLM, 'SOFTWARE\GSC Game World\STALKER-SHOC','InstallPath', InstallPath) then
begin
SuppressibleMsgBox('S.t.a.l.k.e.r. - Night!',MbCriticalError, Mb_OK, Mb_OK);
Result := False;
Exit;
end;
Result := True;
end;

[/more]

з.ы. Непонятно, если нужен оригинал, зачем давать выбирать другую папку?

Автор: boss911
Дата сообщения: 23.06.2008 00:09
Sampron

Цитата:
Попробуй перед каждой DelTree добавить:
WizardForm.StatusLabel.Caption := 'Удаление Folder1... '

А можно обобщить для всего, то есть, один вывод текста, для всех 'DelTree'?
Я попробовал так:

Код: begin
WizardForm.StatusLabel.Caption:='Завершение установки';
DelTree(ExpandConstant('{app}') + '\Folder1', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder2', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder3\*.log', False, True, False);
end;
Автор: htuos
Дата сообщения: 23.06.2008 00:11
ChVL

Цитата:
Надо что-то аналогичное функциям Delphi CreateProcess, ReadProcessMemory и WriteProcessMemory.

инно позволяет вызывать функции/процедуры из dll. делается это в секции [Code_], синтаксис найдешь в хэлпе
CreateProcess, ReadProcessMemory и WriteProcessMemory вызываются из kernel32.dll
так что все в твоих руках
Автор: serg_aka_lain
Дата сообщения: 23.06.2008 00:15
boss911

Можно.,
На предыдущей странице я так и предложил.

WizardForm.StatusLabel.Caption:='Удаление временных файлов ...';
DelTree(ExpandConstant('{app}') + '\Folder1', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder2', True, True, True);
DelTree(ExpandConstant('{app}') + '\Folder3\*.log', False, True, False);
Автор: KurtWagner
Дата сообщения: 23.06.2008 00:39
Как сделать так чтоб при установке вместо надписи где пишет путь распаковки сделать свою надпись типа идет расраковка видео роликов... распаковка аудио звуков и т.д. ???
+ Вопрос еще сверху как сделать так чтоб вместо белого фона в инсталлере был рисунок или свой цвет!!! ??? заранее спасибо!!!

Добавлено:
как пользоваться файлом config.ini чнрнз инсталлер???
Автор: boss911
Дата сообщения: 23.06.2008 01:08
serg_aka_lain

Пардон, не заметил, из "Закладки" кликнул по теме, и кинуло на последнюю страницу.

Всем спасибо, с помощью Вас, мои желания потихоньку сбываются.
Автор: Nekt
Дата сообщения: 23.06.2008 06:37
Кое-как сделал.. Спасибо всем кто помогал, особенно serg_aka_lain.
Автор: Forslay
Дата сообщения: 23.06.2008 13:29
Парни у меня проблема появилась...

После компилляции мой exe файл не отображает иконку, хотя физически она внутри exe имеется, это можно просмотреть программой ресторатор. Но когда я захожу просто в программу ресторатор и открываю через "Открыть файл [CTRL+O]", то выдаётся ошибка:

Невозможно открыть C:\CS.exe. Ошибка: MapViewOfFile сбой

и кнопка одна: "OK"

Ошибка Windows'кая...

при сборке всё учёл иконка лежит где положено, всё нормально... Параметров сжатия нет, то есть просто упаковка без единой единицы сжатия... Инсталлятор в итоге весит 1.08 GB. Может быть как то большой размер на это влияет? Помогите пожалуйста ! 8*(
Автор: putes
Дата сообщения: 23.06.2008 13:53
а можно ли написать скрипт для переименовании папки
требуется чтобы инсталлятор походу установки переименовал папку Мои документы в My Documents
Автор: Nekt
Дата сообщения: 23.06.2008 14:36
Можно-ли заставить Инсталлер не заменять файлы, а именно редактировать их?
Редактировать на, то что, было выбрано во время инсталяции. редактировать определенной файл в директорие которую выбрал пользователь.
Автор: SotM
Дата сообщения: 23.06.2008 14:53
Forslay
А иконку как прописывал до компиляции?

putes
Смотри функцию RenameFile.

Nekt
?! Перефразируй свой вопрос. Не понятно кто кого заменять и/или редактировать.
Автор: Nekt
Дата сообщения: 23.06.2008 15:15
Мне надо чтобы инстал правил файлы на то значение которое мы выбирем во время инсталяции. Т.е. правит на то-что выбирем. В папке которую мы выбирем, только не изменно имя файла.
Автор: putes
Дата сообщения: 23.06.2008 15:23
SotM
Элементарная операция RenameFile без знаний так просто не даётся...
кто-нибудь покажет скрипт?
Автор: Diawer
Дата сообщения: 23.06.2008 16:00
Попробуйте установить сам Inno Setup, затем запустив Inno запустите установку ещё раз появиться окно "Обнаружен запущенный экземпляр Inno Setup", вопрос как это сделать?
Автор: SotM
Дата сообщения: 23.06.2008 16:41
putes
Дык, в "Руководство по расширенным возможностям Inno Setup 5 (не для чайников) от Kindly" можно найти пример использование RenameFile, или сложно скачать?

Код: procedure CreateBackup;
var
srcFile, destFile: string;
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
Автор: Nekt
Дата сообщения: 23.06.2008 16:45
Да, млин не грамматика моя проблема, а слишком сложный язык для компьютерного мира.
Мне надо чтобы инстал при выборе 1 файл в readme.txt изменил значение 57 на 58, а при выборе 2 изменил 57 на 98. такое млин выозможно?
Автор: SotM
Дата сообщения: 23.06.2008 16:59
Nekt
Ну ты бы мог и так написать, для примера:
1. В диалоговом окне жмакает такие-то опции.
2. Все файлы распаковываются
3. В зависимости от того, что выбрали в первом пункте изменяем 1-2 байта в таком-то текстовом (или двоичном) файле.
4. И этот файл переименовываем в такой-то.

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

Ну принцип, наверное, понятен. Пошагово подумай, как бы компьютер это делал.
Автор: Nekt
Дата сообщения: 23.06.2008 17:26
Файл существует, мне нужно в нем изменить пару цифр..
Можно сделать проверку, если файл существует, то сделать поправку, если, нет скопировать из инстала потом сделать поправку.
А терь подробно, как научить инно редактировать.?
Конечно строчка одна на файл. и эту строчку мне нужно изменить.
Можно сделать, как в нсисе ракладное дерево компнентов некоторых? т.е. развернул чикнул и свернул дерево.
И покрасивее их сделать, не как?
Автор: putes
Дата сообщения: 23.06.2008 18:42
SotM

var
MyDocsFullName, FileName : string;
begin
MyDocsFullName := ExpandConstant( '{userdocs}' );
FileName := ExtractFileName( MyDocsFullName );
StringChangeEx( MyDocsFullName, FileName, 'My Documents', True );
RenameFile( ExpandConstant( '{userdocs}' ), MyDocsFullName );
end;

не работает
Автор: SotM
Дата сообщения: 23.06.2008 19:07
putes
Разумеется не будет работать Эта папка "Мои документы" занята системой, и не позволяет вот так просто переименовывать нам всё подряд.
Я лишь дал пример, он будет работать для других папок (не занятых системой).

Nekt
Значит в этом искомом файле всего лишь одна строчка?
Ну тогда мы просто читаем из этого файла всю строчку, изменяем ее и записываем обратно. Вот тебе и всё "редактирование".
Как в NSISе наверное нет (хоть я и не помню как оно там разворачивается). Лучше приводить скриншоты.
Автор: Nekt
Дата сообщения: 23.06.2008 19:38
в файле не одна искомая строчка всего.. там много строчек. Просто которую мы меняем она одна такая в файле; какая команда в инно изменяет файл?
Автор: boss911
Дата сообщения: 23.06.2008 19:51
Это правда, что секция CustomMessages не понимает флаг 'Tasks'?

Код: [Tasks]
Name: KEYCheckCopy; Description: Создать лог-файл; Flags: unchecked

[CustomMessages]
rus.KEYCheckCopy=-CheckCopy; Tasks: KEYCheckCopy

[Run]
Filename: {app}\_Install.cmd; WorkingDir: {app}; Parameters: {cm:KEYCheckCopy}; Flags: waituntilterminated
Автор: ChVL
Дата сообщения: 23.06.2008 20:02
htuos
Спасибо! Это именно то, что мне надо.
Алгоритм, который требуется реализовать, довольно прост: в памяти по определённому адресу надо занопить имеющееся там значение. В Delphi это выглядит примерно так:

Код: program RAM;

uses
Windows;

{$R *.RES}

var
si : Startupinfo;
pi : ProcessInformation;
NewData : array[0..1] of byte = ($90,$90);

begin

IF CreateProcess(nil,'MyProg.exe',nil,nil,FALSE,
Create_Suspended,nil,nil,si,pi) = true then

begin

WriteProcessMemory(pi.hProcess, Pointer($402000), @NewData);
ResumeThread(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(PI.hThread);

end;

end.
Автор: putes
Дата сообщения: 23.06.2008 20:39
SotM
да я тебе не про то, я свободно ручками переименовываю папку Мои документы, ничем она не занята
твой код НЕ РАБОТАЕТ



var
MyDocsFullName, FileName : string;
begin
MyDocsFullName := ExpandConstant( '{userdocs}' );
FileName := ExtractFileName( MyDocsFullName );
StringChangeEx( MyDocsFullName, FileName, 'My Documents', True );
RenameFile( ExpandConstant( '{userdocs}' ), MyDocsFullName );
end;



ругается на строчку
end;

хелп
Автор: Diawer
Дата сообщения: 23.06.2008 20:53
Флаг uninsremovereadonly нужен мне для секции Код, для дополнительного окна удаленинния этой папки, всё работает как надо но при установки нажав отмену папка не удаляется, как это исправить сохранив её его работоспасобность.

Source: Saves\*; DestDir: {app}\Saves; Flags: ignoreversion recursesubdirs createallsubdirs uninsremovereadonly
Автор: Forslay
Дата сообщения: 23.06.2008 20:57
Да раньше то нормально всё было, и в коде у меня всё нормально блин я даже немогу понять от чего такая фигня 8*(
Автор: Diawer
Дата сообщения: 23.06.2008 21:00
SotM, спасибо за совет, но если я знал бы как это сделать наверное не спрашивал.
Автор: Nekt
Дата сообщения: 23.06.2008 22:01

Код:
procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
S := ExpandConstant('{commondocs}\STALKER-SHOC\')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\readme.txt', 'max_belt = 24\' + #13, true);
end;
end;
Автор: boss911
Дата сообщения: 23.06.2008 23:42
Помогите "склеить" два [more=кода]
Код: procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.StatusLabel.Caption:='Завершение установки';
DelTree(ExpandConstant('{app}') + '\PackFiles', True, True, True);
DelTree(ExpandConstant('{app}') + '\ResFiles', True, True, True);
DelTree(ExpandConstant('{app}') + '\ResHacker', True, True, True);
DelTree(ExpandConstant('{app}') + '\TempFiles\*.log', False, True, False);
end;
end;

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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