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

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

Автор: Diawer
Дата сообщения: 06.08.2008 19:44
Chanka,
большое спасибо за помощь, поскольку я больше уважаю bmp за качество.


Добавлено:
Ещё вопрос ко всем кто в силах помоч, есть [more=Код] [Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Tasks]
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы:

[Code_]
var
Page: TInputFileWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputFilePage(wpSelectTasks,
'Регистрация игры', 'Указать расположение файла регистрации игры?',
'Выберите расположение файла регистрации игры, после этого' #13 'нажмите «Далее»:');
Page.Add('Выбор файла регистрации...', 'Legend.exe|Legend.exe', 'Legend.exe');
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if CurPage = Page.ID then
begin
if FileExists(Page.Values[0]) then
begin
ForceDirectories('C:\123\');
Result:= FileCopy(Page.Values[0], 'C:\123\'+ ExtractFileName(Page.Values[0]), False);
end
else Result:= False;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not IsTaskSelected('askini') then
Result:= True;
end; [/more] где пользователем выбираеться файл и копируется папу C:\123\, но мне надо в {app}, если я заменяю в коде C:\123 на {app}, то это не работает. Если есть соображения, напишите, мне очень нужна эта фишка.
Автор: Genri
Дата сообщения: 06.08.2008 20:18
Diawer

Цитата:
если я заменяю в коде C:\123 на {app}, то это не работает
-- замени на ExpandConstant('{app}\'). Т.е.:
ForceDirectories(ExpandConstant('{app}\'));
Result:= FileCopy(Page.Values[0], ExpandConstant('{app}\')+ ExtractFileName(Page.Values[0]), False);

Автор: ComradG
Дата сообщения: 06.08.2008 20:56
Artem_Butenko

Цитата:
Если Вы имели ввиду написание темы для Inno Setup на C++, поделитесь своим опытом.

Не совсем темы, скорее программы значительно расширяющей возможности программы - что-то наподобие самой Delphi. По поводу xml - почитай соответсвующюю литературу, может мы тогда поймем друг друга. По поводу ресурсов системы - опять-таки долго объяснять. Те пять лет, что я проработал в Мелкософте не прошли даром - виндовую ось я знаю как свои пять. Относительно Паскаля могу же сказать , что я его основательно подзабыл. Кстати, нет никаких идей по поводу http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=586&limit=1&m=1#1

Добавлено:
P.S.Т.е. http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=580#lt
Автор: noiseless
Дата сообщения: 07.08.2008 11:17
Shift7

Цитата:
Могу ли я в момент запуска файла изменить текст (где распаковка файлов)???

Проще, наверно, будет через секцию [Run]

Filename: "{src}\setup.exe"; WorkingDir: "{app}"; StatusMsg: "Распаковка файлов..."; Flags: waituntilterminated
Автор: Artem_Butenko
Дата сообщения: 07.08.2008 12:31
ComradG. Выполнить в Inno Setup полную иммитацию страницы выбора компонентов установки, аналогичную таковой в NSIS на 100% , - затруднительно, в силу отсутствия некоторых контролов. М.б. это будет доступно в следующих версиях Inno Setup. Чтобы больше убедиться в вышесказанном, сравните последние версии Form Designer для Inno Setup и NSIS! Хотя, м.б., некоторые эффекты можно осуществить через функции препроцессора Inno, но здесь я ничем помочь не могу, поскольку плохо в нем разбираюсь, из-за отсутствия русской справки. Если я глубоко ошибаюсь, - поправте; буду только рад!
Автор: Genri
Дата сообщения: 07.08.2008 14:17
ComradG

Цитата:
виндовую ось я знаю как свои пять
-- ок. тогда тебе не составит труда оказать помощь по следующей проблеме: нужен пример кода (можно на си), в котором осуществляется упаковка или распаковка зип архива через методы системного шелла, но без отображения диалогового окна. Хочу прописать функцию в инно, но знаний винды не хватает.
Добавление: на крайний случай хотя бы сам параметр, который реально отключает отображение диалога.
Автор: Diawer
Дата сообщения: 07.08.2008 16:55
Уважаемый Genri вы помогли мне довести до ума [more=всё тот-же код] [Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Tasks]
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы:

[Code_]
var
Page: TInputFileWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputFilePage(wpSelectTasks,
'Регистрация игры', 'Указать расположение файла регистрации игры?',
'Выберите расположение файла регистрации игры, после этого' #13 'нажмите «Далее»:');
Page.Add('Выбор файла регистрации...', 'Legend.exe|Legend.exe', 'Legend.exe');
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if CurPage = Page.ID then
begin
if FileExists(Page.Values[0]) then
begin
ForceDirectories(ExpandConstant('{app}\'));
Result:= FileCopy(Page.Values[0], ExpandConstant('{app}\')+ ExtractFileName(Page.Values[0]), False);end
else Result:= False;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not IsTaskSelected('askini') then
Result:= True;
end;[/more], но есть проблема, до этого был вопрос (копируется игра с
содержащимся в ней Legend.exe и если у пользователя есть крякнутый Legend.exe, то после его выбора он должен перезаписывать оригинальный, но почему-то не перезаписывает?), ты посоветовал (копировать файл после установки. Например, заменить if CurPage = Page.ID then... на if CurPage = wpFinished then...), если файл копировать, то всё нормально, но если снять галочку в ([Tasks]
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы: )то-есть не копировать, то в конце устаноки где надо закончить инсталляцию и закрыть иснсталлер – он виснет. Почему?
Автор: htuos
Дата сообщения: 07.08.2008 18:12
Genri

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

тоже периодически возникает такой вопрос.
вроде эта длл используется c:\WINDOWS\system32\zipfldr.dll как расширение оболочки (по ресурсам похоже)
а вот на пример кода я бы тоже взглянул, а то все руки никак не дойдут разобраться с этим делом
Автор: Genri
Дата сообщения: 07.08.2008 18:33
Diawer -- [more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Tasks]
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы:

[_Code]
var
Page: TInputFileWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputFilePage(wpSelectTasks,
'Регистрация игры', 'Указать расположение файла регистрации игры?',
'Выберите расположение файла регистрации игры, после этого' #13 'нажмите «Далее»:');
Page.Add('Выбор файла регистрации...', 'Legend.exe|Legend.exe', 'Legend.exe');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) and IsTaskSelected('askini') then
begin
ForceDirectories(ExpandConstant('{app}\'));
FileCopy(Page.Values[0], ExpandConstant('{app}\')+ ExtractFileName(Page.Values[0]), False);
end;
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if (CurPage = Page.ID) and not FileExists(Page.Values[0]) then
Result:= False;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not IsTaskSelected('askini') then
Result:= True;
end; [/more] Особо не проверял.

htuos -- думаю, с помощью ComradG это теперь не проблема.
Автор: Sampron
Дата сообщения: 07.08.2008 20:39
На одном китайском сайте нашёл много интерсных вещей для inno setup, выложу здесь ссылки.

Библиотека для отображения анимированых GIF, JPG и BMP:
http://restools.hanzify.org/article.asp?id=79

Библиотека придающая рисунку эффект воды:
http://restools.hanzify.org/article.asp?id=83 <-первый вариант
http://restools.hanzify.org/article.asp?id=80 <-второй вариант

Библиотека придающая рисунку эффект огня:
http://restools.hanzify.org/article.asp?id=81

Библиотека для обработки событий курсора при наведении на кнопки CheckListBox-а:
http://restools.hanzify.org/article.asp?id=78

Пересобраные файлы инсталлятора с возможностью сворачивания/разворачивания дерева компонентов:
http://restools.hanzify.org/article.asp?id=89

Удобная IDE для инно, но на китайском:
http://restools.hanzify.org/article.asp?id=47

P.S. внизу после всех описаний и примеров есть прямые ссылки на закачку.
Автор: Diawer
Дата сообщения: 07.08.2008 20:48
Genri спасибо огромное, всё работает, реально очень помог, спасибо.


Добавлено:
Genri, нет придела благодарности.
Автор: ComradG
Дата сообщения: 07.08.2008 21:20
Genri

Цитата:
через методы системного шелла

Цитата:
но без отображения диалогового окна
- уж не хотите ли вы, уважаемый, руткиты клепать?

Добавлено:
Ладно, дай мне пару недель.

Добавлено:
Только если не секрет скажи зачем тебе это?


Добавлено:
По поводу такого долгого срока - у меня на работе ща аврал.
Автор: Genri
Дата сообщения: 07.08.2008 21:56
ComradG -- причем тут руткиты? Тема пестрит вопросами касательно бекапов. Архивирование для бекапа - вещь далеко не лишняя. Раз операционная система предоставляет такие возможности - в использовании сторонних файлов нет необходимости. Обозначить процесс архивации/разархивации лучше в самом инно (так получается более системно). А в этом случае дополнительное диалоговое окно совсем не нужно (только сбивает пользователя с толку). Так что в моей просьбе нет ничего странного.
А вот зачем тебе при твоих знаниях требуются две недели! чтобы написать одну! строку??? Я же прошу - дай мне только сам параметр!!! Если лень или нет времени написать десяток строк кода - дай только один параметр, который отключит вывод диалога!!! Какой смысл знать решение, и тянуть время чтоб его озвучить???
Если аврал - дай название параметра - остальное я сам сделаю!!!
Автор: ComradG
Дата сообщения: 07.08.2008 22:26

Цитата:
зачем тебе при твоих знаниях требуются две недели!

Я думал тебе нужна "заглушка".
Параметр чего именно?


Добавлено:
Да, а почему именно zip?
Автор: Genri
Дата сообщения: 07.08.2008 22:41
ComradG

Цитата:
Параметр чего именно?
-- еще раз: при архивировании через системный шелл, выходит диалоговое окно. Оно мне не нужно. С каким параметром вызывать архивацию, чтобы окно не отображалось? Что тут непонятного??? Я не могу ничего сделать, не зная какой параметр подставлять. Попробовал методом тыка, но окно скрыть не удалось. Ты же знаешь винду как свои пять (это твои слова). Может тебе быстрее будет дать нужный параметр, чем задавать вопросы?


Цитата:
почему именно zip?
-- не понял? Ты можешь через шелл предложить что-то еще?

Добавлено:
Я конечно понимаю, что с твоими знаниями, ты наверняка можешь предложить альтернативу, но так как это так же наверняка долго объяснять, то лучше не надо. Лучше дай параметр. Одно слово написать - это быстро.
Автор: ComradG
Дата сообщения: 07.08.2008 23:29
Блин, четты путаешь. Лично я не понимаю о чем именно ты мне пытаешься ща сказать. Короче, если можно, то в личку и поподробнее.
Автор: Genri
Дата сообщения: 07.08.2008 23:55
ComradG

Цитата:
Блин, четты путаешь. Лично я не понимаю о чем именно ты мне пытаешься ща сказать.
-- Так что тут непонятно??? htuos сразу понял. Какого-нибудь школьника, я конечно мог бы ткнуть носом в MSDN... Но если человек пять лет отработал в Майкрософте и знает винду как свои пять....


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


Добавлено:
Попробую объяснить так:
1. При архивировании через системный шелл, выходит диалоговое окно. Это надеюсь понятно?
2. Почему необходимо скрыть это окно - объяснял выше. Это надеюсь тоже понятно?
3. С каким параметром вызывать архивацию, чтобы окно не отображалось? Вопрос понятен?
Автор: Shift7
Дата сообщения: 08.08.2008 03:27
noiseless

Цитата:
Проще, наверно, будет через секцию [Run]

Filename: "{src}\setup.exe"; WorkingDir: "{app}"; StatusMsg: "Распаковка файлов..."; Flags: waituntilterminated

Это я и так знаю.....вопрос был не как сделать через секцию выполнить...
Автор: machetos
Дата сообщения: 08.08.2008 09:13
Столкнулся с такой проблемой...
После замены размера шрифта инстолятора на 9, при установке прогресс бар стал смещаться дальше, чем был (т.е. за пределы экрана).. Поменял данные смещения, поставил в угол как и было. Всё это делал на работе. Принёс домой, стал проверять, а смещеный инстал опять не в углу!!!
Оказалось, что при разном разрешении экрана смещение происходит на разное расстояние!!! Возврат к стандартному размеру шрифта исправляет проблему (смещение одинаково при различных разрешениях экрана). ЧТО ДЕЛАТЬ? Нужен шрифт 9, помогите!!
Автор: Raf_SE
Дата сообщения: 08.08.2008 09:29
Ктонить знает как в реестре записать строку формата "multisz" с таким содержанием:
"{app}\Maps\(2)Challenger.scm
{app}\Maps\Ladder\(4)Lost Temple.scm
{app}\Maps\(5)Sherwood Forest.scm
{app}\Maps\(6)New Gettysburg.scm
{app}\Maps\(8)Green Valleys.scm"
т.е. чтобы было не одной сплошной линией, а каждый новый пункт был с новой строчки.
Автор: Chanka
Дата сообщения: 08.08.2008 10:08
Genri,

Посмотри, пожалуйста, ПМ!!!
Автор: nOobCrafter
Дата сообщения: 08.08.2008 11:33
У меня все еще есть трабл вот с этим. Помогите кто инбудь пожалуйста.

Цитата:

Вопрос по поводу "InnoSetupFAQ_ru-board.chm"
[more=вот][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
Compression=lzma
SolidCompression=yes
Uninstallable=no

[Tasks]
Name: arc; Description: "Create backup"

[Files]
Source: Files\*.*; DestDir: {app}; BeforeInstall: CreateBackup


Код:
var
Page: TInputDirWizardPage;
ArcDir: String;

procedure CreateBackup();
var
SrcFile, DestFile: string;
begin
if IsTaskSelected('arc') then
begin
// if Not DirExists(ArcDir) then CreateDir(ArcDir);
ForceDirectories(ArcDir); // исправлено
SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
If (CurPageID = Page.ID) then
ArcDir := Page.Values[0];
Result:= True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
If (PageID = Page.ID) and
(Not IsTaskSelected('arc')) then
Result:= True
else Result:= False;
end;

procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Select Backup Location',
'Where should backup files be stored?',
'To continue, click Next.' + #10#13#10#13 +
'If you would like to select a different folder, click Browse.',
False, 'Backup');
Page.Add('');
//Page.Values[0] := ExpandConstant('{sd}\Backup');
Page.Values[0] := AddBackslash(ExpandConstant('{sd}\Backup')) +
GetDateTimeString('yyyy/mm/dd hh:nn', '_', '.' ); // исправлено
end; [/more] код оттуда, почему с его помошью нельзя забэкапить "любую" папку, а только ходящую в состав инсталяшки? Я допустим хочу сделать бэкап рабочего стола при инстале проги (для примера говорю, хоть C:\123), а этого неполучается, в {sd}\Backup создается папка со временем инстала, но она пуста( Как можно это реализовать?


P.S. Фукнция -
Код: BackupDir(ExpandConstant('C:\123\'), ExpandConstant('C:\BackUp\' + '-' + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', '-')), False);
Автор: machetos
Дата сообщения: 08.08.2008 11:54
Ответ не нужен, проблема с размером шрифта и смещение прогресс бара решена..
Автор: htuos
Дата сообщения: 08.08.2008 18:27
nOobCrafter

Цитата:
Фукнция -
Код:
BackupDir(ExpandConstant('C:\123\'), ExpandConstant('C:\BackUp\' + '-' + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', '-')), False);

работает так как надо только копия создается каждую секунду во время установки, то есть после инстала я имею папку C:\BackUp но в ней куча папок типа "-08-08-2008 14-47-34", кол-во зависит от того сколько секунд происходила инсталяция((
Как это можно пофиксить?

не знаю что там у тебя не так (не видел кода твоей BackupDir), но по идее не должна создаваться куча каталогов
попробуй [more=этот][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
Uninstallable=no

[Code_]
type
TSHFileOpStruct=record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND;
lpszProgressTitle: PChar;
end;

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

function CopyFile_(FromFile,ToDir:string;IsRemove:boolean):boolean;
var
F:TShFileOpStruct;
a1,a2:string;
begin
F.Wnd:=0;
if IsRemove then F.wFunc:=$0001 else F.wFunc:=$0002;
a1:=FromFile+#0#0;
F.pFrom:=PChar(a1);
a2:=AddBackslash(ToDir)+#0#0;
F.pTo:=PChar(a2);
F.fFlags:=$0254;
Result:=(ShFileOperation(F)=0);
end;

procedure BackupDir(const FromDir,ToDir,FileMask:string;IsRemove,IncludeSubDirs:boolean);
var
FindRec:TFindRec;
sFileName,fd,td:string;
begin
fd:=AddBackslash(FromDir);
td:=AddBackslash(ToDir);
ForceDirectories(td);
if FindFirst(fd+FileMask,FindRec) then begin
try
repeat
sFileName:=fd+FindRec.Name;
if ((FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY)=0) then CopyFile_(sFileName,td,IsRemove)
else
if IncludeSubDirs then
if (FindRec.Name<>'') and (FindRec.Name<>'.') and (FindRec.Name<>'..') then
BackupDir(sFileName,td+FindRec.Name,FileMask,IsRemove,IncludeSubDirs);
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;

procedure InitializeWizard();
begin
BackupDir('d:\222\ISGSG_NEW','d:\Backup\'+GetDateTimeString('yyyy/mm/dd hh:nn:ss','_','.'),'*.*',False,True);
end;[/more] код
у меня он работает нормально
Автор: Diawer
Дата сообщения: 08.08.2008 20:52
Есть вопрос по [more=коду] [Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program

[Tasks]
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы:

[_Code]
var
Page: TInputFileWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputFilePage(wpSelectTasks,
'Регистрация игры', 'Указать расположение файла регистрации игры?',
'Выберите расположение файла регистрации игры, после этого' #13 'нажмите «Далее»:');
Page.Add('Выбор файла регистрации...', 'Legend.exe|Legend.exe', 'Legend.exe');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) and IsTaskSelected('askini') then
begin
ForceDirectories(ExpandConstant('{app}\'));
FileCopy(Page.Values[0], ExpandConstant('{app}\')+ ExtractFileName(Page.Values[0]), False);
end;
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if (CurPage = Page.ID) and not FileExists(Page.Values[0]) then
Result:= False;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not IsTaskSelected('askini') then
Result:= True;
end;[/more] который мне помогли довести до ума, как сделать что бы
[Tasks]
Name: askini; Description: Указать расположение файла регистрации; GroupDescription: Регистрация программы:
отображалось на отдельной странице после страницы выбора дополнительных задач, где выбор дополнительных значков: соответственно если флажок установлен то появляется страница выбора файла, если нет то пропускается. Понадобилось это при упаковке игры где у меня в секции [Tasks_] много строк и эта важная опция теряется и не в тему среди всего.
Автор: ComradG
Дата сообщения: 08.08.2008 21:27
Genri

Цитата:
С каким параметром вызывать архивацию

Теперь дошло. Тока там Си тебе не поможет. На сайте самого Мелкософта по этому поводу есть целый раздел. Сам я тебе популярно на пальцах объяснить, наверное, не смогу - боюсь, что дам не совсем корректный ответ, так как сам лично на практике с этим не сталкивался. Постараюсь на днях скинуть ссылку. Кстати, уважаемый htuos
Цитата:
c:\WINDOWS\system32\zipfldr.dll
-эта библиотека отвечает за создание пожатой zip-алгоритмом папки, напрямую к zip архивации она отношения не имеет.

Автор: Genri
Дата сообщения: 08.08.2008 22:25
ComradG

Цитата:
Теперь дошло. Тока там Си тебе не поможет.
-- нда... случай клинический...
Судя по всему, ты впервые слышишь про методы системного шелла. И с С++ ты также плохо знаком. Можешь посмотреть [more=пример на С++]
OleInitialize(NULL);

char cInPath[]= "c:\\file.zip\\readme.txt";
char cOutPath[]= "c:\\13";
int nLen;
BSTR bstrZip,bstrFol;
HRESULT hres;

IShellDispatch *pSD = NULL;
Folder* pZipFolder = NULL;
Folder* pOutFolder = NULL;

hres=CoCreateInstance(CLSID_Shell, NULL,
CLSCTX_SERVER,IID_IShellDispatch, (LPVOID *) &pSD);

if (SUCCEEDED(hres))
{
VARIANT vZipDir, vOutDir, vOptions;
VariantInit(&vZipDir);
vZipDir.vt = VT_BSTR;
nLen = (lstrlen(cInPath) + 1) * sizeof(WCHAR);
bstrZip = SysAllocStringByteLen(NULL,nLen);

MultiByteToWideChar(CP_ACP, 0, cInPath, -1, bstrZip, nLen);
vZipDir.bstrVal = bstrZip;

VariantInit(&vOutDir);
vOutDir.vt = VT_BSTR;
nLen = (lstrlen(cOutPath) + 1) * sizeof(WCHAR);
bstrFol = SysAllocStringByteLen(NULL, nLen);

MultiByteToWideChar(CP_ACP, 0, cOutPath, -1, bstrFol, nLen);
vOutDir.bstrVal = bstrFol;

if (SUCCEEDED(pSD->NameSpace(vOutDir, &pOutFolder)))
{
VariantInit(&vOptions);
vOptions.vt = VT_I4;
vOptions.lVal = 0;
hres=pOutFolder->CopyHere(vZipDir, vOptions);
pOutFolder->Release();
VariantClear(&vOptions);
}
pSD->Release();
SysFreeString(bstrZip);
VariantClear(&vZipDir);
SysFreeString(bstrFol);
VariantClear(&vOutDir);
}
[/more] - может хоть что-то поймешь.

А для остальных в ближайшее время выложу пример скрипта с возможностью архивации и разархивации с использованием системных методов (без дополнительных файлов). Надеюсь вопрос бекапов будет окончательно закрыт

Добавлено:
Ах да, ты же кроме C++ еще и Python знаешь. На случай, если ты вдруг не только паскаль, но и си слегка подзабыл - специально для тебя - [more=код на Python]
def zipfold(zipfolder="C:\\ttt", zipfile="C:\\zttt.zip"):
import win32file,win32con,time,win32com.client
fo = win32com.client.Dispatch("Scripting.FileSystemObject")
zf = fo.CreateTextFile(zipfile, True)
zf.Write("PK"+chr(5)+chr(6)+chr(0)*18)
zf.close()
shell = win32com.client.Dispatch("Shell.Application")
nsdest = shell.NameSpace(zipfile)
nsorig = shell.NameSpace(zipfolder)
nbf = nsorig.items().Count
nsdest.CopyHere(nsorig)
reste=0
while reste
[/more]
Автор: ComradG
Дата сообщения: 08.08.2008 22:34

Цитата:
случай клинический... случай клинический...

Да пошел ты. Я никому и ничего доказывать не собираюсь, особенно таким идиотам как ты.
Автор: Genri
Дата сообщения: 08.08.2008 22:42
ComradG

Цитата:
эта библиотека отвечает за создание пожатой zip-алгоритмом папки, напрямую к zip архивации она отношения не имеет
-- афигеть... целая библиотека... А на инно эта операция в пару строк:
procedure InitializeWizard();
var
str: string;
i: integer;
begin
str:= Chr($50)+Chr($4B)+Chr($05)+Chr($06);
for i:= 0 to 17 do
str:= str + #0;
SaveStringToFile('C:\TEMP\test.zip', str, False);
end;
... о чем там в майкрософте думают...

Добавлено:

Цитата:
Да пошел ты.
-- я так понимаю, что параметр ты мне не дашь? Ну что ж... как-нибудь сами... По-простому...
Автор: ComradG
Дата сообщения: 08.08.2008 22:59

Цитата:
о чем там в майкрософте думают...

О том, чтобы такие балбесы как ты не плодили на чужих компах малварь.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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