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

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

Автор: GRom V
Дата сообщения: 13.11.2006 03:25
ОГРОМНОЕ СПАСИБО Kindly

Добавлено:
Кто нить знает скриптик?
вопрос №1: В версии 4 написано как сделать слайдшоу во
время инсталляции, с запуском в начале и остановки вконце. Так вот
вопрос: можно ли сделать чтобы картинки менялись не тупо по таймеру,
а например в зависимости от хода установки, т.е выполнено 10% - одна
картинка, 20% - другая, 30%-третья и т.д

Вопрос №2: перед началом инсталляции у меня копируются файлы во временную папку (проигрывание мелодии при инсталляции, слайд шоу и т.д)
Во время этого копирования происходит как бы тупняк. Нельзя ли сделать чтоб во время копирования временных файлов, появлялся граббер или "табличка" т.е чтоб этот процесс было видно!

Если бы вы описали бы эту возможность, многие были бы вам очень
признательны!!!
Заранее спасибо!
Автор: mazafaka
Дата сообщения: 13.11.2006 05:42
Ребята, скажите plz есть ли в Inno опция (в идеале - ключ в командной строке), с помощью которой можно было бы выключать компьютер после завершения процесса компиляции. Или хотя бы как сделать так, чтобы после завершения компиляции завершался и сам процесс compil32.exe или iscc.exe?
Искал и в справке, и в FAQ - подобного ничего не описано..

Спасибо!
Автор: GRom V
Дата сообщения: 13.11.2006 08:34

Цитата:
Ребята, скажите plz есть ли в Inno опция (в идеале - ключ в командной строке), с помощью которой можно было бы выключать компьютер после завершения процесса компиляции. Или хотя бы как сделать так, чтобы после завершения компиляции завершался и сам процесс compil32.exe или iscc.exe?
Искал и в справке, и в FAQ - подобного ничего не описано..


http://q-mich.narod.ru/comAll.html#Выключить - описание команд, может найдешь то что ищешь
Автор: mazafaka
Дата сообщения: 13.11.2006 11:14
GRom V
хмм.. не понимаю, как это прикрутить к Inno Setup?

и, если уж на то пошло, то есть штука гораздо мощнее - http://nirsoft.net/utils/nircmd.html
Автор: Genri
Дата сообщения: 13.11.2006 17:12
GRom V

Цитата:
Вопрос №2: ... Нельзя ли сделать чтоб во время копирования временных файлов, появлялся граббер или "табличка" т.е чтоб этот процесс было видно!


[Files]
Source: .\Files\*; DestDir: "{tmp}"; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath

[Code]
procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;


Добавлено:

Цитата:
вопрос №1: .... можно ли сделать чтобы картинки менялись не тупо по таймеру,
а например в зависимости от хода установки, т.е выполнено 10% - одна
картинка, 20% - другая, 30%-третья и т.д


можешь попробовать использовать в коде WizardForm.ProgressGauge.Position


Добавлено:
mazafaka

Цитата:
есть ли в Inno опция (в идеале - ключ в командной строке), с помощью которой можно было бы выключать компьютер после завершения процесса компиляции. Или хотя бы как сделать так, чтобы после завершения компиляции завершался и сам процесс compil32.exe или iscc.exe?


compil32 /cc "c:\isetup\samples\my script.iss"



Добавлено:
ISCC.exe /?
Автор: Chanka
Дата сообщения: 13.11.2006 19:25
Genri

Цитата:
можешь попробовать использовать в коде WizardForm.ProgressGauge.Position


Genri, а ты знаешь как это сделать. Может напишешь примерчик?
Автор: GRom V
Дата сообщения: 14.11.2006 02:54

Цитата:
хмм.. не понимаю, как это прикрутить к Inno Setup?


В данной ссылке приводятся команды, кстате и спомощью которой можно выключить комп.
Создай файл.cmd ,с помощью блокнота, укажи в нем нужную команду и в конце установки запусти его скрытно например.




Добавлено: Genri

Цитата:
[Files]
Source: .\Files\*; DestDir: "{tmp}"; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath

[Code]
procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;


Спасибо, но как сделать, если копирование происходит перед началом установки?
Т.Е при копировании в данном случае чтобы было видно
Пример:

[Files]
Source: файл test.mp3; DestDir: {tmp};
Source: 1by1\1by1.exe; DestDir: {tmp};
Source: 1by1\1by1.exe.manifest; DestDir: {tmp};
Source: 1by1\1by1.ini; DestDir: {tmp};
Source: 1by1\1by1IRAssistant.cmd; DestDir: {tmp};

function InitializeSetup(): Boolean;
var
res:Integer;
s, ResultStr:string;
begin
ExtractTemporaryFile('файл test.mp3'); //Меня интерисует этот момент
ExtractTemporaryFile('1by1.exe');
ExtractTemporaryFile('1by1.ini');
ExtractTemporaryFile('1by1.exe.manifest');
ExtractTemporaryFile('1by1IRAssistant.cmd');


Автор: noiseless
Дата сообщения: 14.11.2006 10:12
KLERIK2222

Цитата:
как пользоваться функцией DeleteFile? напишите часть кода , например, для файла гггг.txt

Довольно просто:
deletefile('<путь до файла>\гггг.txt');
Если файл есть, функция вернет TRUE, иначе FALSE.
Автор: mazafaka
Дата сообщения: 14.11.2006 23:06
GRom V
ты не понял - комп нужно выключить после того, как завершится процесс компиляции (создания инсталлятора), а не после установки..

впрочем, Genri уже ответил, спасибо!
Автор: KLERIK2222
Дата сообщения: 15.11.2006 01:34
Пишу так

Код: code
function DeleteFile('C:\Documents and Settings\User\Рабочий стол\гггг.txt');
Автор: Genri
Дата сообщения: 15.11.2006 02:09
GRom V
Если конечно я тебя правильно понял, то:


function InitializeSetup(): Boolean;

var
Form: TSetupForm;
ProgressBar: TNewProgressBar;
begin
Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(512);
Form.ClientHeight := ScaleY(128);
Form.Caption := 'Hello from Genri';
Form.Center;

ProgressBar := TNewProgressBar.Create(Form);
ProgressBar.Left := ScaleX(64);
ProgressBar.Top := ScaleX(8);
ProgressBar.Width := Form.Width - (2 * ProgressBar.Left);
ProgressBar.Height := ScaleX(16);
ProgressBar.Parent := Form;
ProgressBar.Min:= 0;
ProgressBar.Max:= 30;
ProgressBar.Position := 0;
Form.Show();

ExtractTemporaryFile('test.mp3');
ProgressBar.Position:= ProgressBar.Position + 10;

ExtractTemporaryFile('1by1.exe');
ProgressBar.Position:= ProgressBar.Position + 10;

ExtractTemporaryFile('1by1.ini');
ProgressBar.Position:= ProgressBar.Position + 10;

finally
Form.Free();
end;
Result:= True;
end;

Автор: GRom V
Дата сообщения: 15.11.2006 08:01
Genri Огроиное спасибо!

Позволь воспользоваться твоим уменеем есче.
Вот есть такая штука:

[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
//Это файлы для слайд-шоу (может быть больше)
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[Code]
const
BACKGROUND=6;
TIMER=16;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
//В начале этапа установки запускаем слайд-шоу
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Таймер показа изображений, в секундах
isxbb_StartTimer(3,BACKGROUND)
end
//На завершающем этапе останавливаем таймер, при этом возвращается фоновое изображение по умолчанию
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;



Можно ли сделать смену картинок не по таймеру, а помере выполнения установки.
Например 10% - 1.jpg, 20% - 2.jpg и.т.д.
Автор: chum2000
Дата сообщения: 15.11.2006 09:22
KLERIK2222
не пиши "function", а просто DeleteFile('C:\Documents and Settings\User\Рабочий стол\гггг.txt');
Автор: KLERIK2222
Дата сообщения: 16.11.2006 02:00
все равно выдает ошибку
Автор: Pantalone
Дата сообщения: 16.11.2006 13:03
усе
Автор: andremar
Дата сообщения: 17.11.2006 12:45
А выполнима ли такая задачка: при инсталяции проверить IP пользователя и взависимости от этого (список разрешенных/запрещенных) разрешить или отменить установку?
Автор: Dima555555
Дата сообщения: 17.11.2006 13:56
Inno Setup 5.1.8 дайте русик плиз....
Автор: Genri
Дата сообщения: 17.11.2006 16:13
andremar

Цитата:
проверить IP пользователя
- выполнимо. в свое время использовал IPUtils.dll (где брал - не помню ), которая экспортировала 3 функции:

function GetLocalComputerName: PChar;
external 'GetLocalComputerName@files:IPUtils.dll stdcall';

function GetLocalIPAddress: PChar;
external 'GetLocalIPAddress@files:IPUtils.dll stdcall';

function GetIPAddress(HostName: PChar): PChar;
external 'GetIPAddress@files:IPUtils.dll stdcall';

можешь и сам написать, могу и выслать.

GRom V
если есть исходники длл-ки - думаю достаточно просто. С нуля писать - сложнее. Я не програмист
Автор: Genri
Дата сообщения: 20.11.2006 10:22
andremar
Попробую [more=здесь]
--------------050103060904080009070402
Content-Type: application/x-zip-compressed;
name="IPUtils.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="IPUtils.zip"

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
AAAgYAAAAAA=
--------------050103060904080009070402--
[/more] выложить IPUtils.dll d кодировке base64
Автор: VitaliM
Дата сообщения: 20.11.2006 12:49
Genri
Чего-то у меня ни одна софтина не понимает твой архив UUE.
Автор: Genri
Дата сообщения: 20.11.2006 13:07
1. все скопировать в файл *.txt
2. убрать пробелы везде кнроме заголовка (операция replace в любом редакторе)
3. переименовать в *.eml
4. открыть любым почтовым клиентом.
5. сохранить аттач.
.....
128. научить меня правильно выкладывать base64
Автор: VitaliM
Дата сообщения: 20.11.2006 14:27
Genri
Тебе смешно, откуда ж я знал, что это формат письма с вложением. Здесь если постят файлы в таком виде, то обычно это формат UUE.
Архив извлек, ОК.
Автор: Genri
Дата сообщения: 20.11.2006 18:36
Так сказать, для тренировки выкладывания в UUE, и для сообщества, выкладываю еще одну длл-ку с тремя функциями:

// Запуск консольного приложения
function ExecConsoleAppX(CommandLine: PChar): PChar;
external 'ExecConsoleAppX@files:ISTask.dll stdcall delayload';

// Завершение процесса по имени файла
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

// Проверка, запущен ли процесс по имени файла
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

Надергал в свое время из инета и собрал в одну длл-ку. Скачать в формате UUE [more=здесь]
begin 0644 ISTask.zip
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
M``H````````````@`````````$E35&%S:RYD;&Q02P$"%@`4````"``8DW0U
MFT_;%@8!``#/`0``!P```````````"````"B%@``;F5W+G1X=%!+!08`````
.`@`"`&T```#-%P`````
end
[/more]

Добавлено:
если кому надо - есть исходники под делфи 5
Автор: jonikDk
Дата сообщения: 20.11.2006 19:22

Цитата:
Добавлено:
если кому надо - есть исходники под делфи 5


выложи куда то или скинь на ящик master_jk Собака mail.ru

Автор: Genri
Дата сообщения: 21.11.2006 10:30
Исходники упомянутой выше ISTask.dll под Delphi 5 [more=здесь]

Код:
library ISTask;

uses
SysUtils,
Classes,
Windows,
Tlhelp32,
Psapi,
FileCtrl;

{$R *.RES}

var
SaveExit: Pointer;

procedure LibExit;
begin
// library exit code
ExitProc := SaveExit; // restore exit procedure chain
end;

procedure ExecConsoleApp(CommandLine: String; Output: TStringList; Errors:
TStringList); stdcall;
var
sa: TSECURITYATTRIBUTES;
si: TSTARTUPINFO;
pi: TPROCESSINFORMATION;
hPipeOutputRead: THANDLE;
hPipeOutputWrite: THANDLE;
hPipeErrorsRead: THANDLE;
hPipeErrorsWrite: THANDLE;
Res, bTest: Boolean;
env: array[0..100] of Char;
szBuffer: array[0..256] of Char;
dwNumberOfBytesRead: DWORD;
Stream: TMemoryStream;
begin
sa.nLength := sizeof(sa);
sa.bInheritHandle := true;
sa.lpSecurityDescriptor := nil;
CreatePipe(hPipeOutputRead, hPipeOutputWrite, @sa, 0);
CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);
ZeroMemory(@env, SizeOf(env));
ZeroMemory(@si, SizeOf(si));
ZeroMemory(@pi, SizeOf(pi));
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow := SW_HIDE;
si.hStdInput := 0;
si.hStdOutput := hPipeOutputWrite;
si.hStdError := hPipeErrorsWrite;

(* Remember that if you want to execute an app with no parameters you nil the
second parameter and use the first, you can also leave it as is with no
problems. *)
Res := CreateProcess(nil, pchar(CommandLine), nil, nil, true,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, @env, nil, si, pi);

// Procedure will exit if CreateProcess fail
if not Res then
begin
CloseHandle(hPipeOutputRead);
CloseHandle(hPipeOutputWrite);
CloseHandle(hPipeErrorsRead);
CloseHandle(hPipeErrorsWrite);
Exit;
end;
CloseHandle(hPipeOutputWrite);
CloseHandle(hPipeErrorsWrite);

//Read output pipe
Stream := TMemoryStream.Create;
try
while true do
begin
bTest := ReadFile(hPipeOutputRead, szBuffer, 256, dwNumberOfBytesRead,
nil);
if not bTest then
begin
break;
end;
Stream.Write(szBuffer, dwNumberOfBytesRead);
end;
Stream.Position := 0;
Output.LoadFromStream(Stream);
finally
Stream.Free;
end;

//Read error pipe
Stream := TMemoryStream.Create;
try
while true do
begin
bTest := ReadFile(hPipeErrorsRead, szBuffer, 256, dwNumberOfBytesRead,
nil);
if not bTest then
begin
break;
end;
Stream.Write(szBuffer, dwNumberOfBytesRead);
end;
Stream.Position := 0;
Errors.LoadFromStream(Stream);
finally
Stream.Free;
end;

WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(hPipeOutputRead);
CloseHandle(hPipeErrorsRead);
end;


function ExecConsoleAppX(str: PChar): PChar; stdcall;
var
OutP: TStringList;
ErrorP: TStringList;
begin
OutP := TStringList.Create;
ErrorP := TstringList.Create;

ExecConsoleApp(str, OutP, ErrorP);
Result:= OutP.GetText;

OutP.Free;
ErrorP.Free;
end;


procedure CreateWin9xProcessList(List: TstringList);
var
hSnapShot: THandle;
ProcInfo: TProcessEntry32;
begin
if List = nil then Exit;
hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot <> THandle(-1)) then
begin
ProcInfo.dwSize := SizeOf(ProcInfo);
if (Process32First(hSnapshot, ProcInfo)) then
begin
List.Add(ProcInfo.szExeFile);
while (Process32Next(hSnapShot, ProcInfo)) do
List.Add(ProcInfo.szExeFile);
end;
CloseHandle(hSnapShot);
end;
end;

procedure CreateWinNTProcessList(List: TstringList);
var
PIDArray: array [0..1023] of DWORD;
cb: DWORD;
I: Integer;
ProcCount: Integer;
hMod: HMODULE;
hProcess: THandle;
ModuleName: array [0..300] of Char;
begin
if List = nil then Exit;
EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
ProcCount := cb div SizeOf(DWORD);
for I := 0 to ProcCount - 1 do
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
False,
PIDArray[I]);
if (hProcess <> 0) then
begin
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
List.Add(ModuleName);
CloseHandle(hProcess);
end;
end;
end;

procedure GetProcessList(var List: TstringList);
var
ovi: TOSVersionInfo;
begin
if List = nil then Exit;
ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(ovi);
case ovi.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List);
VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List);
end
end;

function RunTask(FileName: string; bFullpath: Boolean): Boolean; stdcall;
var
i: Integer;
MyProcList: TstringList;
begin
MyProcList := TStringList.Create;
try
GetProcessList(MyProcList);
Result := False;
if MyProcList = nil then Exit;
for i := 0 to MyProcList.Count - 1 do
begin
if not bFullpath then
begin
if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then
Result := True
end
else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True;
if Result then Break;
end;
finally
MyProcList.Free;
end;
end;



function KillTask(ExeFileName: PChar): integer; stdcall;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;

FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);

while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;

CloseHandle(FSnapshotHandle);
end;

exports ExecConsoleAppX,
KillTask,
RunTask;

begin // library initialization code
SaveExit := ExitProc; // save exit procedure chain
ExitProc := @LibExit; // install LibExit exit procedure

end.
Автор: andremar
Дата сообщения: 21.11.2006 19:13
Genri

Цитата:
IPUtils.dll d кодировке base64

Спасибо, узнал для себя много нового, осталось как-то пристроить эту dll. Спрашивать "как?" наверное некрасиво, может литературу посоветуете
Автор: Genri
Дата сообщения: 21.11.2006 23:21
andremar

Код:
[Files]
Source: "IPUtils.dll"; Flags: dontcopy

[Code]
const
CR = #10#13;

function GetLocalIPAddress: PChar;
external 'GetLocalIPAddress@files:IPUtils.dll stdcall';

function InitializeSetup(): Boolean;
var
currentIP: string;
begin
Result:= True;
currentIP:= GetLocalIPAddress;

if currentIP <> '192.168.1.1' then
begin
MsgBox('Setup Aborted !' + CR +
'Check Your Licence !', mbError, MB_OK);
Result:= False;
end;
end;
Автор: andremar
Дата сообщения: 23.11.2006 11:57
Genri
Спасибо, все отлично работает! Проверяются IP и если это враги - программа не устанавливается)
Появилась мысль: а если враг сбегает в магазин за магарычем, тогда можно будет ему сказать серийник.
Поле ввода серийного номера появляется только "с информацией о пользователе" (имя, организация). Можно сделать так чтоб запрашивалось ввести только номер?
Автор: Genri
Дата сообщения: 23.11.2006 12:37
andremar - см.почту
Автор: Genri
Дата сообщения: 24.11.2006 20:18
Может кто из програмеров подскажет, почему нижеуказанная конструкция не работает:

Код:
[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongInt);

function SetTimer(hWnd: HWND; nIDEvent, uElapse: LongInt;
lpTimerFunc: TProc): LongInt;
external 'SetTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongInt);
begin
MsgBox('Hello.', mbInformation, MB_OK);
end;

function InitializeSetup(): Boolean;
var
pTimer: LongInt;

begin
pTimer:= SetTimer(0, 0, 1000, @OnTimer);
Result:= True;
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: ICONS


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