PDA

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


Страниц : 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

Serega
05-08-2009, 19:34
кроме восстановления файлов при нажатии кнопки "Отмена" »
Проверил, у меня востановление файлов работает.

Rosich
05-08-2009, 20:08
Проверил, у меня востановление файлов работает. »

Поначалу я использовал скрипт, до секции [Code] из своего скрипта, он постепенно развивается, а затем взял полностью весь скрипт, который Вы переделали и скомпилировал файл-инсталлятор и с этого файла запускал, результат виден: http://img7.imageshost.ru/imgs/090805/230c76ad26/ta9117.jpg (http://imageshost.ru/links/93aee4463dd879fc71a48d285fedf10f). На картинке видно, что папка Backup присутствует и не удалена, а файлов-оригиналов нет. Повторно инсталлятор не запустился, подтверждая, что файла TS3.exe - нет!

P.S.
Serega, а у Вас какой Inno Setup стоит, случаем не юникодовская бетка, у меня: ISPack 5.3.2 beta с катайскима дополнениями (Inno Setup ISCmplr 5.2.3 build 090424 и Inno Setup Compiler 5.2.3 build 090506 English). Может быть из-за этого у меня не идет скрипт?

Serega
06-08-2009, 00:18
у Вас какой Inno Setup стоит »
Расширенная версия от Restools.
Может быть из-за этого у меня не идет скрипт? »
Нет, просто когда я проверял, менял пути на свои, а функция MoveDir перемещает папку целиком. Получается, что перемещение папки Backup происходило из ExpandConstant('{app}\Game\Bin\Backup\') в ExpandConstant('{app}\Game\Bin'), т.е. простыми словами зрительно ничего не менялось, т.к. она копировалась сама в себя...
Попробуйте этот скрипт.

Rosich
06-08-2009, 09:40
Расширенная версия от Restools. »
У меня примерно такая же.
Попробуйте этот скрипт. »
Попробовал, ругается: http://img7.imageshost.ru/imgs/090806/4f96f3912f/tef47a.jpg (http://imageshost.ru/links/8a8d7c0d35c26ec88469af42dba4567a)
P.S.
Спасибо, что не бросаете в трудную минуту! Что бы я без Вашей помощи делал!

Serega
06-08-2009, 17:31
Rosich, забыл удалить лишние begin и end, т.е. должно быть так:
procedure RecoveryBackup;
var
FindFiles: TFindRec;
MyDir, BackupDir: string;
begin
MyDir:= ExpandConstant('{app}\Game\Bin\');
BackupDir:= ExpandConstant('{app}\Game\Bin\Backup\');
if DirExists(BackupDir) then
if FindFirst(BackupDir + '*.*', FindFiles) then
begin
repeat
MoveFile(BackupDir + FindFiles.Name, MyDir + FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackupDir)
end;
end;



Попробовал, ругается: »
ошибка, говорит о том, что переменная BackupDir объявлена второй раз, хотя в скрипте который я давал, эта переменная объявлена один раз. Как исправить:
- Переименуйте BackupDir, допустим на BackDir или как вам больше нравится, только не забудьте изменить все BackupDir на новое имя в procedure RecoveryBackup;
procedure RecoveryBackup;
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
MyDir:= ExpandConstant('{app}\Game\Bin\');
BackDir:= ExpandConstant('{app}\Game\Bin\Backup\');
if DirExists(BackDir) then
if FindFirst(BackDir + '*.*', FindFiles) then
begin
repeat
MoveFile(BackDir + FindFiles.Name, MyDir + FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir)
end;
end;

Rosich
06-08-2009, 18:41
Serega, Вы кудесник, все заработало!
Еще раз - СПАСИБО!!!

Mihail88
08-08-2009, 16:30
Всем привет.
Такое дело... хотел сделать "инсталлер" с музыкой (mp3) и галочку отключения.
нашел пример с трекерной музыкой, попытался переделать скрипт, вылетает ошибка "Type mismatch."

в архиве этот скрипт и оригинал

BlackSelf
08-08-2009, 16:34
Mihail88, вот скрипт для проигрывания mp3-музыки.

Mihail88
08-08-2009, 16:58
BlackSelf, спасибо, попробую переделать с TCheckBox'ом

все вроде сдела но не работает, тажа ошибка

STR1KEE
08-08-2009, 18:55
Привет всем. Я новенький в этом деле и подскажите пожалуйста:

1. Как сделать во время установки, чтобы во весь экран было слайд шоу и как изменить время пролистывания картинок
2. Читал, читал так и не понял как можно изменить скин установки
3. Как прикрепить проверку информации о системе и сравнивить её с сист. требованиями игры и чтобы потом пользователь хоть и не подходит система смог продолжить установку

И для каждого лучше код именно этой функции, а не всего листа
А еще если можно и не составить труда вставте в этот скрипт с пояснениями, а то до меня долго доходит)))

; Script created by STR1KE.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{1E70AEDE-704B-41A4-8937-42C91DAAEA25}
AppName=Crysis Warhead
AppVerName=Crysis Warhead v1.1.1.690
AppPublisher=A.G.Shamans
AppPublisherURL=http://torrents.across.su/
AppSupportURL=http://torrents.across.su/
AppUpdatesURL=http://torrents.across.su/
DefaultDirName={pf}\Crysis Warhed
DefaultGroupName=Crysis Warhead
AllowNoIcons=yes
LicenseFile=C:\Users\STR1KE\Documents\RePack\Crysis Warhead\1.txt
OutputDir=C:\RePack\Crysis Warhead
OutputBaseFilename=Setup
SetupIconFile=C:\Users\STR1KE\Documents\RePack\Crysis Warhead\Warhead.ico
Compression=lzma/ultra64
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=734003200
AppCopyright=Copyright (C) 2009 A.G. Shamans.
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Electronic Arts\Crytek\Crysis WARHEAD\Bin32\Crysis.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files (x86)\Electronic Arts\Crytek\Crysis WARHEAD\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\Crysis Warhead"; Filename: "{app}\Crysis.exe"
Name: "{group}\{cm:ProgramOnTheWeb,Crysis Warhead}"; Filename: "http://torrents.across.su/"
Name: "{group}\{cm:UninstallProgram,Crysis Warhead}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Crysis Warhead"; Filename: "{app}\Crysis.exe"; Tasks: desktopicon

[Run]
Filename: "{tmp}\Redist\directx.exe"; Description: "Óñòàíîâèòü DirectX?"; Flags: nowait postinstall skipifsilent
Filename: "{app}\Crysis.exe"; Description: "{cm:LaunchProgram,Crysis Warhead}"; Flags: nowait postinstall skipifsilent

Mihail88
08-08-2009, 19:30
STR1KEE, насчет скинов, может эти...

mitek_gsm
08-08-2009, 23:07
Добрый вечер всем.
Есть папка A и папка Б, в папке А лежит файл 1.txt, его нужно перенести в папку Б c именем 2.txt (после копирования файлов)
Как это реализовать в Inno Setup ?

Rosich
08-08-2009, 23:20
Добрый вечер всем.
Есть папка A и папка Б, в папке А лежит файл 1.txt, его нужно перенести в папку Б c именем 2.txt (после копирования файлов)
Как это реализовать в Inno Setup ? »
Легко:
[Files]
Source: папка а\1.txt; DestDir: {app}\папка б; DestName: 2.txt; Flags: ignoreversion
Поясняю: в DestName: – задается новое название файла, в нашем случае - 2.txt.

Serega
08-08-2009, 23:29
Легко: »
Если я правильно понял, то нужно после копирования, т.е. после установки...
Как это реализовать в Inno Setup ? »
В секции кода, запишите:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then // выполнится на финальной странице
if FileExists(ExpandConstant('{app}\A\1.txt')) then // проверка на присутствие файла
begin
// создаём папку, если её нет
if not DirExists(ExpandConstant('{app}\B')) then CreateDir(ExpandConstant('{app}\B'));
// копируем файл
FileCopy(ExpandConstant('{app}\A\1.txt'), ExpandConstant('{app}\B\2.txt'), False);
// удаляем файл
DeleteFile(ExpandConstant('{app}\A\1.txt'));
end;
end;

mitek_gsm
09-08-2009, 00:22
Rosich, В вашем примере файл копируется в папку еще на этапе компиляции, а мне нужно было после установки. В этом случае код Serega, более правильный.

P.S. и новая задачка )) Есть {app}, в ней есть папка A, нужно после установки скопировать содержимое в папку B (должно получится {app}В)

Serega
09-08-2009, 01:56
новая задачка »
Приблизительно так же, как и в SHFileOperation.iss:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
type
TSHFileOpStruct = record
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word;
end;

const
FO_MOVE = $0001;
FO_COPY = $0002;
FOF_SILENT = $0004;
FOF_NOCONFIRMATION = $0010;
FOF_FILESONLY = $0080;
FOF_NOCONFIRMMKDIR = $0200;

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

function MoveDir(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;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
if DirExists(ExpandConstant('{app}\A')) then
begin
MoveDir(ExpandConstant('{app}\A'), ExpandConstant('{app}\B'), True);
end;
end;

zl0ybot
09-08-2009, 09:19
Здравствуйте, кто может сделать: чтобы архив freearc распаковал Precomp а патом распаковал эти архивы .

Serega
09-08-2009, 12:42
кто может сделать: чтобы архив freearc распаковал Precomp а патом распаковал эти архивы . »
zl0ybot, здравствуйте, сказать честно, звучит как, сделайте за меня скрипт, который я бы хотел в последствии использовать...
Нет, чтоб, вот у меня рабочий код (не скрипт, скрипты есть в интернете и много ума не надо, чтоб скопировать) распаковки FreeArc'a и код распаковки Precomp'a, а как сделать распаковку сначала одного, а затем другого. Либо, вот распаковываю так, а здесь вылетает ошибка...

Вы сделайте, хоть что-нибудь сами, т.е. своими руками, а в моментах, где не будет получаться, вам обязательно помогут и подскажут.

Mihail88
09-08-2009, 13:05
Вы сделайте, хоть что-нибудь сами, т.е. своими руками, а в моментах, где не будет получаться, вам обязательно помогут и подскажут. »
Проигрывание mp3 с возможность ютключения чекбоксом, прописал bass.dll с коммандами, но что то не выходит. не пропускает "if BASS_StreamCreateFile(FALSE, PAnsiChar(Name1), 0, 0, BASS_SAMPLE_LOOP) then"
Скрипт http://webfile.ru/3827892

Вверху ссобщение с dll и mp3 файлом.

BlackSelf
09-08-2009, 15:05
Mihail88, пробуйте:

[Setup]
AppName=Example.Play.MP3.Music.On.Start.Up.With.Texture
AppVerName=Example.Play.MP3.Music.On.Start.Up.With.Texture
AppPublisher=genri.sampron.iTASmania_Inc.uncle
DefaultDirName=C:\Play.MP3
OutputBaseFilename=play.mp3.by.genri.sampron.iTASmania_Inc.uncle


[Files]
Source: compiler:BASS.dll; DestDir: "{tmp}"; Flags: dontcopy noencryption
Source: G:\Inet\Music\Marselle\Marselle - MarsFM (mixtape)\13 - Marselle - Он был.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression


[_Code]
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
cb:TCheckBox;

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): DWORD;
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_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

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

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

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

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

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('13 - Marselle - Он был.mp3');
mp3Name := ExpandConstant('{tmp}\13 - Marselle - Он был.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure cbmusic(Sender: TObject);
begin
if cb.checked = true then
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
end;
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
end;
end;
end;
if cb.checked = false then
BASS_ChannelPause(mp3Handle);
end;


procedure InitializeWizard();
begin
cb:=TCheckBox.Create(WizardForm);
cb.Parent:=WizardForm;
cb.Width:=ScaleX(220);
cb.Left:=ScaleY(10);
cb.Top:=ScaleY(330);
cb.CAPTION:='Проигрывание музыки';
cb.ONCLICK:=@cbmusic;
cb.checked:=true
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;




© OSzone.net 2001-2012