Войти

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


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

Dodakaedr
17-05-2015, 09:42
Не подскажите как брать путь установки из реестра. »
Приблизительно так[setup]
appname=app
appvername=1.0 app
defaultdirname={code:GetDir}

[Code]
function GetDir(S: string): string;
var
d,r: string;
begin
S := ExpandConstant('{pf}\app');
if RegKeyExists(HKLM, 'Software\1') then begin
if RegQueryStringValue(HKLM, 'Software\1', 'Dir', d) then
S := d;
end;
if RegKeyExists(HKLM, 'Software\2') then begin
if RegQueryStringValue(HKLM, 'Software\2', 'Dir', r) then
S := r;
end;
if RegValueExists(HKLM, 'Software\1', 'Dir') and RegValueExists(HKLM, 'Software\2', 'Dir') then
s := r;
Result := S;
end;

Okta_333
18-05-2015, 11:30
Доброго времени суток!
Помогите пожалуйста сделать панельку (не логотип), как на втором скрине:

http://i70.fastpic.ru/big/2015/0518/4b/c48b5ca4f31c98469a22eb51de0e514b.png http://i70.fastpic.ru/big/2015/0518/4e/76fe1f22913e63866ca12a509d9e6d4e.png

Панель представлена в виде PNG-картинки. Открывается с нажатием на кнопку. В активном режиме панели деактивируются CancelButton и NextButton.
MusicButton и VolPB не интересуют.

Николай_Николаич@vk
18-05-2015, 22:43
Здравствуйте.
Подскажите, как такое реализовать.
Путь установки C:\Prog
в папке Prog есть папка Prog1
И в этой папке куча папок.
Так вот, как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1

ekspoint
20-05-2015, 04:57
как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1 »

FileCopy(ExpandConstant('{app}\Prog\Prog1\file.hof'), ExpandConstant('{app}\Prog\Prog1\Prog1_1\file.hof'),false);
FileCopy(ExpandConstant('{app}\Prog\Prog1\file.hof'), ExpandConstant('{app}\Prog\Prog1\Prog1_2\file.hof'),false);

kotyarko@fb
20-05-2015, 21:12
ekspoint, для индусов такой вариант в самый раз подходит (это я про тот случай, если вложенных папок, например, 30). И не факт, что имеющиеся папки имеют не уникальные имена.

Путь установки C:\Prog
в папке Prog есть папка Prog1
И в этой папке куча папок.
Так вот, как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1 »
Например так:
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
FileCopy(ExpandConstant('{app}\file.hof'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name + '\file.hof', False);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;

Dodakaedr
21-05-2015, 00:11
Так вот, как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1 »
Наглядный пример использования))[setup]
appname=test
appvername=test 1.0
defaultdirname={sd}\test

[files]
source: file.hof; destdir: {app};

[dirs]
name: {app}\Prog\Prog1\1;
name: {app}\Prog\Prog1\2g;
name: {app}\Prog\Prog1\3k;
name: {app}\Prog\Prog1\4i;

[code]
procedure SendFileToSubFolders;
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
FileCopy(ExpandConstant('{app}\file.hof'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name + '\file.hof', False);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then SendFileToSubFolders;
end;

Николай_Николаич@vk
23-05-2015, 00:28
Наглядный пример использования))
Скрытый текст
Код:
[setup]
appname=test
appvername=test 1.0
defaultdirname={sd}\test
[files]
source: file.hof; destdir: {app};
[dirs]
name: {app}\Prog\Prog1\1;
name: {app}\Prog\Prog1\2g;
name: {app}\Prog\Prog1\3k;
name: {app}\Prog\Prog1\4i;
[code]
procedure SendFileToSubFolders;
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
FileCopy(ExpandConstant('{app}\file.hof'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name + '\file.hof', False);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then SendFileToSubFolders;
end;
»

Спасибо, а не подскажете, как по такому же принципу раскидать папку

kotyarko@fb
23-05-2015, 01:16
Спасибо, а не подскажете, как по такому же принципу раскидать папку »
Используйте SHFileOperation, в нём есть функция CopyDir.

Николай_Николаич@vk
23-05-2015, 02:13
Используйте SHFileOperation, в нём есть функция CopyDir. »
А вы не могли бы привести пример копирования в папки, как с файлом.
а то кроме как просто копировать, ничего не получается.

kotyarko@fb
23-05-2015, 02:21
А вы не могли бы привести пример копирования в папки, как с файлом.
а то кроме как просто копировать, ничего не получается. »
#include "SHFileOperation.iss"
.....
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
CopyDir(ExpandConstant('{app}\Folder'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;

Сам SHFileOperation можете спокойно найти в сети.

Николай_Николаич@vk
23-05-2015, 12:41
Код:
#include "SHFileOperation.iss"
.....
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
CopyDir(ExpandConstant('{app}\Folder'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;
Сам SHFileOperation можете спокойно найти в сети.

Спасибо огромное, но есть одна проблема, в папки у которых в имени есть _ не копируется.

kotyarko@fb
23-05-2015, 13:38
но есть одна проблема, в папки у которых в имени есть _ не копируется. »
Код, по идеи, не должен игнорировать такие папки. У меня не игнорирует (пруф в прикреплённом скрине).
Не знаю, почему у тебя так.

Николай_Николаич@vk
23-05-2015, 20:43
Код, по идеи, не должен игнорировать такие папки. У меня не игнорирует (пруф в прикреплённом скрине).
Не знаю, почему у тебя так. »
Если внести папку в секцию [dirs] то все хорошо.
Еще случай, один раз инсталл пропустил папку с названием "1", при повторной попытке всетаки скопировал.

kotyarko@fb
23-05-2015, 20:48
Еще случай, один раз инсталл пропустил папку с названием "1", при повторной попытке всетаки скопировал. »
Папки создаются при этой же инсталляции?

Николай_Николаич@vk
23-05-2015, 21:04
Папки создаются при этой же инсталляции? »
Нет, они уже были.

kotyarko@fb
23-05-2015, 21:23
Нет, они уже были. »
Тогда хз.

Snoopak96
23-05-2015, 22:03
Николай_Николаич@vk,
[setup]
appname=test
appvername=test 1.0
defaultdirname={sd}\test

[code]
type
TSHFileOpStruct = record
Wnd: HWND;
wFunc: UINT;
pFrom: PAnsiChar;
pTo: PAnsiChar;
fFlags: Word;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND;
lpszProgressTitle: PAnsiChar;
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 BackupDir(const fromDir, toDir: AnsiString; IsMove: Boolean): Boolean;
var
fos: TSHFileOpStruct;
_fromDir, _toDir: AnsiString;
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 := PAnsiChar(_fromDir);
fos.pTo := PAnsiChar(_toDir);
end else
begin
_fromDir:= _fromDir + SR.Name + #0#0;
_toDir := _toDir + SR.Name + #0#0;
fos.pFrom := PAnsiChar(_fromDir);
fos.pTo := PAnsiChar(_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 := PAnsiChar(_fromDir);
fos.pTo := PAnsiChar(_toDir);
Result := (0 = ShFileOperation(fos));
end;
end;

procedure SendFileToSubFolders(ScanDir, InFile: string);
var
TFR: TFindRec;
begin
if FindFirst(AddBackslash(RemoveBackslash(ScanDir)) + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then begin
FileCopy(InFile, AddBackslash(RemoveBackslash(ScanDir)) + TFR.Name + '\' + ExtractFileName(InFile), False);
end;
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;

procedure SendDirToSubFolders(ScanDir, InDir: string);
var
TFR: TFindRec;
begin
if FindFirst(AddBackslash(RemoveBackslash(ScanDir)) + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if (TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
BackupDir(AddBackslash(RemoveBackslash(InDir)), AddBackslash(RemoveBackslash(ScanDir)) + TFR.Name + '\' + ExtractFileName(InDir), false);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
//Для файла
// if CurStep = ssPostInstall then SendFileToSubFolders(ExpandConstant('{app}\1'), ExpandConstant('{sd}\spyhunter.log'));
//Для папки
if CurStep = ssPostInstall then SendDirToSubFolders(ExpandConstant('{app}\1'), ExpandConstant('{sd}\sh4ldr'));
end;

svs23
23-05-2015, 22:35
сори что не в тему!!!
kotyarko@fb ящик ЛС полный! новые сообщения не уходят...

Николай_Николаич@vk
23-05-2015, 23:20
Кстати, не подскажете, давно искал пример двойного прогресс бара (Один по файловый, второй - общий прогресс), но никак не мог найти.
Есть ли таковой?

Okta_333
24-05-2015, 02:06
Кстати, не подскажете, давно искал пример двойного прогресс бара (Один по файловый, второй - общий прогресс), но никак не мог найти.
Есть ли таковой? »
В ISDone 06final есть пример SecondProgressBar




© OSzone.net 2001-2012