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

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

Автор: Pantalone
Дата сообщения: 24.08.2012 17:57
Genri
Спасибо за советы, уже обошел систему другим способом
Ради интереса проверил твои способы снова, хотя вроде я их по отдельности пробовал ранее и не помогло.
1. allowunsafefiles - ноль реакции.
2. restartreplace - почитай справку чуть выше той строки, которую ты скопировал, а именно:
When an existing file needs to be replaced, and it is in use (locked) by another running process, Setup will by default display an error message.
Т.е. эта штука нужна только если файл занят и нет возможности его сразу заменить, тогда после установки сетап запросит перезагрузку, именно запросит, а не сам юзер должен догадаться. А файл, с которым я возился, не занят.
3. PrivilegesRequired=admin - тоже не помогает.
В общем как я думаю, работает защита виндовая Windows File Protection и установщик не дает ее насильно обойти, но хоть бы ругнулся, собака такая. Такие вот дела. Проверял на чистой системе под админом, так что это какая-то глобальная заковыка, а не ошибка на каком-то этапе тестирования.
Автор: Genri
Дата сообщения: 24.08.2012 18:41
Pantalone

Цитата:
restartreplace
-- вообще-то этот флаг я и не предлагал Он был в твоем примере. Исходя из этого и был сделан вывод, что он тебе нужен. Если уверен что файл не занят другим процессом - restartreplace не обязателен.
А вот allowunsafefiles обязателен, если требуется замена небезопасного файла. Все файлы в системной директории считаются небезопасными.


Автор: marineharrison
Дата сообщения: 24.08.2012 18:45
Доброго времени суток. Делаю инсталлер для assassins creed revelations. просьба подсказать каким образом в инсталлере прописать, чтоб он файлы извлекал по такому адресу:
Для XP
C:\Documents and Settings\Имя пользователя\Local Settings\Application Data\Ubisoft Game Launcher\savegame_storage\c2tpZHJvdw==\40
Для Win 7
C:\Users\Alex\AppData\Local\Ubisoft Game Launcher\savegame_storage\c2tpZHJvdw==\40
Как видно пути разные. Может в инно есть какое-нибудь значения типа {docs} или {group}, ну чтоб инсталлер сам путь определял и не нужно было писать вручную. Ну или какие-нибудь другие варианты...
Автор: Gnom3
Дата сообщения: 24.08.2012 20:32
Обновлена сборка InnoUltra. Исправлены вроде-бы, все ошибки интеграции в проводник, исправлено несколько неявных багов.
Добавлены русификаторы всех версий. За предоставленные русификаторы расширенной версии благодарим Devils Night, для стандартной версии нашел в SamLab. Качество русиков не блещет - видно, что автор плохо знаком с предметом, некоторые моменты будут совсем непонятны непосвященному, но в целом - жить можно. Перевод стандартной версии выполнен отдельным языковым файлом, поэтому, когда надоест - можно просто удалить файл Compil32.RUS из папки C:\Program Files (x86)\Inno Setup 5(или, куда вы ставите) для стандартной версии, либо файл Russian_***.lng из подпапки ISLanguages в папке с установленной сборкой.
Автор: LordSP
Дата сообщения: 26.08.2012 07:42
marineharrison

Можно, вот так:

[Files]
Source: "Твоя папка\Files\*"; DestDir: "{localappdata}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

=)


Добавлено:
А вот меня мучает такой вопрос, на этапе выбора компонентов установки, можно ли щелкая по чебоксам (если список компонентов большой), напротив отмеченного компонента, показать что это (шрифт, иконка, или тема) в виде изображения?
Автор: zakfromevil
Дата сообщения: 26.08.2012 13:24
Привет всем. Есть следующая задача: имеется список программ, которые при установке пользователь может выбрать в окне выбора компонентов. Мне нужно сформировать текстовый файл с названием этих компонентов на основе выбора пользователя.

ps: проект USB Reanimator, хочется автоматического прописывания в menu.lst

http://rutracker.org/forum/viewtopic.php?t=2826958
Автор: MOD_TEC
Дата сообщения: 26.08.2012 13:56
Как избежать моргания картинок на ботве при переходе на следующую страницу...
Автор: Snoopak96
Дата сообщения: 26.08.2012 19:18
zakfromevil
[more]

Код: [Setup]
AppName=USB Reanimator
AppVerName=USB Reanimator
DefaultDirName={sd}\USB Reanimator
DefaultGroupName=USB Reanimator
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: ERDSystemRecovery; Description: ERD System Recovery 5.0/6.0/6.5;
Name: ElcomsoftSystemRecovery; Description: Elcomsoft System Recovery Pro 3.0.466;
Name: PasswareResetWindows; Description: Passware Reset Windows Password Standard Edition 1.2.1.195;
Name: PasswareWindowsKeyEnerprise; Description: Passware Windows Key Enerprise 10.3.2585;
Name: PLoPUSB; Description: PLoP USB 2.0 driver;

[_Code]
var
ExtractList: TStringList;


procedure MenuSave;
begin
ExtractList:=TStringList.Create;
ExtractList.Add('gfxmenu /BOOT/gfx/neutron.gz');
ExtractList.Add('timeout 20');
ExtractList.Add('default 0'+#13#10);

if IsComponentSelected('ERDSystemRecovery') then begin
ExtractList.Add('title ERD System Recovery 5.0/6.0/6.5 ->');
ExtractList.Add('find --set-root');
ExtractList.Add('configfile /boot/grub/erd.lst'+#13#10);
end;

//В каждой последней строке выбранного компонента дописываем #13#10 - переход на новую строку

if IsComponentSelected('ElcomsoftSystemRecovery') then begin
ExtractList.Add('title Elcomsoft System Recovery Pro 3.0.466');
ExtractList.Add('map /IMAGE/elcomsoft_esr_pro.iso (0xFF) || map --mem /IMAGE/elcomsoft_esr_pro.iso (0xFF)');
ExtractList.Add('map --hook');
ExtractList.Add('chainloader (0xFF)'+#13#10);
end;

if IsComponentSelected('PasswareResetWindows') then begin
ExtractList.Add('title Passware Reset Windows Password Standard Edition 1.2.1.195');
ExtractList.Add('map /IMAGE/rwps.iso (0xFF) || map --mem /IMAGE/rwps.iso (0xFF)');
ExtractList.Add('map --hook');
ExtractList.Add('chainloader (0xFF)'+#13#10);
end;

if IsComponentSelected('PasswareWindowsKeyEnerprise') then begin
ExtractList.Add('title Passware Windows Key Enerprise 10.3.2585');
ExtractList.Add('find --set-root');
ExtractList.Add('map --mem /WINSETUP/23SP2.ISO (0xff)');
ExtractList.Add('map (hd0) (hd1)');
ExtractList.Add('map (hd1) (hd0)');
ExtractList.Add('map --hook');
ExtractList.Add('root (0xff)');
ExtractList.Add('chainloader /I386/SETUPLDR.BIN'+#13#10);
end;

if IsComponentSelected('PLoPUSB') then begin
ExtractList.Add('title Start PLoP USB 2.0 driver');
ExtractList.Add('find --set-root --ignore-floppies /IMAGE/plpbt.bin');
ExtractList.Add('kernel /IMAGE/plpbt.bin'+#13#10);
end;

//С остальными компонентами так же по аналогии^

ExtractList.Add('title Reboot');
ExtractList.Add('savedefault --wait=2');
ExtractList.Add('reboot'+#13#10);

ExtractList.Add('title Power off computer');
ExtractList.Add('halt');

ExtractList.SaveToFile(ExpandConstant('{app}\menu.lst')); //Сохроняем в menu.lst по пути установки
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then MenuSave; //Выполняем процедуру после установки всех выбранных приложений
end;
Автор: Twoface
Дата сообщения: 26.08.2012 19:47
Друзья помогите, кто нибудь прикрутите пожалуйста ISDone и если не сложно то сделайте кликабельное лого без фона.

Вот скрипт: http://rghost.ru/40017592
Автор: marineharrison
Дата сообщения: 26.08.2012 21:21
LordSP
Спасибо, попробую.
Автор: zakfromevil
Дата сообщения: 26.08.2012 22:08
Спасибо большое! А может есть способ писать в разные *.lst файлы? Например, чтобы для Acronis создался файл acr.lst в папке app/boot/grub и далее писать в него?
Автор: YURSHAT
Дата сообщения: 26.08.2012 23:13
MOD_TEC в ботве его уже вроде давно нет, если вы конечно не юзаете первую версию
Автор: Snoopak96
Дата сообщения: 27.08.2012 13:10
zakfromevil,
Под каждый файл lst объявляешь в переменных свой TStringList и так же в зависимости от выбранных компонентов делаешь содержание, потом его сохраняешь в файл.
[more]
Код: [Setup]
AppName=USB Reanimator
AppVerName=USB Reanimator
DefaultDirName={sd}\USB Reanimator
DefaultGroupName=USB Reanimator
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: ERDSystemRecovery; Description: ERD System Recovery 5.0/6.0/6.5;
Name: ElcomsoftSystemRecovery; Description: Elcomsoft System Recovery Pro 3.0.466;
Name: PasswareResetWindows; Description: Passware Reset Windows Password Standard Edition 1.2.1.195;
Name: PasswareWindowsKeyEnerprise; Description: Passware Windows Key Enerprise 10.3.2585;
Name: PLoPUSB; Description: PLoP USB 2.0 driver;

Name: Acronis; Description: Выбор версии Acronis; Types: full;
Name: Acronis\DirectorSuite; Description: Acronis Disk Director Suite 10.0 (2.169); Flags: exclusive;
Name: Acronis\DirectorAdvanced; Description: Acronis Disk Director Advanced Server/Workstation 11.0 Rus; Flags: exclusive;
Name: Acronis\TrueImage; Description: Acronis TrueImage 14.0 Rus; Flags: exclusive;
Name: Acronis\AcronisBackup; Description: Acronis Backup & Recovery 11 Advanced Server with UR; Flags: exclusive;

[_Code]
var
ExtractList, AcronisList: TStringList;

procedure MenuSave;
begin
///////////////////////////////////////////////////////////////[menu.lst]///////////////////////////////////////////////////////////
ExtractList:=TStringList.Create;
ExtractList.Add('gfxmenu /BOOT/gfx/neutron.gz');
ExtractList.Add('timeout 20');
ExtractList.Add('default 0'+#13#10);

if IsComponentSelected('ERDSystemRecovery') then begin
ExtractList.Add('title ERD System Recovery 5.0/6.0/6.5 ->');
ExtractList.Add('find --set-root');
ExtractList.Add('configfile /boot/grub/erd.lst'+#13#10);
end;

//В каждой последней строке выбранного компонента дописываем #13#10 - переход на новую строку

if IsComponentSelected('ElcomsoftSystemRecovery') then begin
ExtractList.Add('title Elcomsoft System Recovery Pro 3.0.466');
ExtractList.Add('map /IMAGE/elcomsoft_esr_pro.iso (0xFF) || map --mem /IMAGE/elcomsoft_esr_pro.iso (0xFF)');
ExtractList.Add('map --hook');
ExtractList.Add('chainloader (0xFF)'+#13#10);
end;

if IsComponentSelected('PasswareResetWindows') then begin
ExtractList.Add('title Passware Reset Windows Password Standard Edition 1.2.1.195');
ExtractList.Add('map /IMAGE/rwps.iso (0xFF) || map --mem /IMAGE/rwps.iso (0xFF)');
ExtractList.Add('map --hook');
ExtractList.Add('chainloader (0xFF)'+#13#10);
end;

if IsComponentSelected('PasswareWindowsKeyEnerprise') then begin
ExtractList.Add('title Passware Windows Key Enerprise 10.3.2585');
ExtractList.Add('find --set-root');
ExtractList.Add('map --mem /WINSETUP/23SP2.ISO (0xff)');
ExtractList.Add('map (hd0) (hd1)');
ExtractList.Add('map (hd1) (hd0)');
ExtractList.Add('map --hook');
ExtractList.Add('root (0xff)');
ExtractList.Add('chainloader /I386/SETUPLDR.BIN'+#13#10);
end;

if IsComponentSelected('PLoPUSB') then begin
ExtractList.Add('title Start PLoP USB 2.0 driver');
ExtractList.Add('find --set-root --ignore-floppies /IMAGE/plpbt.bin');
ExtractList.Add('kernel /IMAGE/plpbt.bin'+#13#10);
end;

//С остальными компонентами так же по аналогии^

ExtractList.Add('title Reboot');
ExtractList.Add('savedefault --wait=2');
ExtractList.Add('reboot'+#13#10);

ExtractList.Add('title Power off computer');
ExtractList.Add('halt');

ExtractList.SaveToFile(ExpandConstant('{app}\menu.lst')); //Сохроняем в menu.lst по пути установки
///////////////////////////////////////////////////////////////[menu.lst]///////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////[acr.lst]///////////////////////////////////////////////////////////
if IsComponentSelected('Acronis') then begin
AcronisList:=TStringList.Create;
AcronisList.Add('Напишем чего-нибудь');
AcronisList.Add('ещё чего-нибудь'+#13#10);

if IsComponentSelected('Acronis\DirectorSuite') then begin
AcronisList.Add('Acronis Disk Director Suite 10.0 (2.169)'+#13#10);
end;

if IsComponentSelected('Acronis\DirectorSuite') then begin
AcronisList.Add('Acronis Disk Director Suite 10.0 (2.169)'+#13#10);
end;

if IsComponentSelected('Acronis\TrueImage') then begin
AcronisList.Add('Acronis TrueImage 14.0 Rus'+#13#10);
end;

if IsComponentSelected('Acronis\AcronisBackup') then begin
AcronisList.Add('Acronis Backup & Recovery 11 Advanced Server with UR'+#13#10);
end;

AcronisList.Add('Конец');

CreateDir(ExpandConstant('{app}\boot')) //Создаём наши папки, если их нету на момент сохронения lst по пути
CreateDir(ExpandConstant('{app}\boot\grub')) //то инно вернёт ошибку

AcronisList.SaveToFile(ExpandConstant('{app}\boot\grub\acr.lst')); //Сохроняем в acr.lst по пути установки app\boot\grub
end;
////////////////////////////////////////////////////////////////[acr.lst]///////////////////////////////////////////////////////////
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then MenuSave; //Выполняем процедуру после установки всех выбранных приложений
end;
Автор: MOD_TEC
Дата сообщения: 27.08.2012 21:56
YURSHAT
Можно пример текструированья прогрес бара на Ботве для IsDone и
чекбоксов пожалуйста заранее спасибо...
Автор: Snoopak96
Дата сообщения: 27.08.2012 22:25
MOD_TEC,
ну я не Юра =D но пример у меня есть http://rghost.ru/36984831
создание чекбоксов - есть пример в самой ботве.
Автор: MOD_TEC
Дата сообщения: 27.08.2012 22:33
Snoopak96
Спасибо...
Автор: Baton34V
Дата сообщения: 28.08.2012 11:28
распаковал и дизасмил CompiledCode.bin, получил что-то отдаленно похожее на асм. Как его прочитать? есть какие-то маны?
Автор: Snoopak96
Дата сообщения: 28.08.2012 13:40
Baton34V,
нет, в исходное состояние скрипт никак не восстановить.
Автор: SotM
Дата сообщения: 28.08.2012 14:15
Baton34V
Ты думаешь, что ты первый кто спросил этот глупый вопрос?
Автор: MOD_TEC
Дата сообщения: 28.08.2012 14:53
Как скрыть текструированные кнопки и отобразить их на опрелеленной странице...Заранее спасибо...
http://forum.oszone.net/attachment.php?attachmentid=86820&d=1346152790
Автор: vint56
Дата сообщения: 28.08.2012 15:09
MOD_TEC у тебя пример на ботве

procedure HideComponents;
begin
BtnSetVisibility(hDirBrowseBtn, false); // мы скрываем кнопку
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
HideComponents;
if CurPageID = wpSelectDir then // это где именно на станице выбор папки установки
begin
BtnSetVisibility(hDirBrowseBtn, true); // здесь мы показываем
end;
end;
Автор: MOD_TEC
Дата сообщения: 28.08.2012 15:26
vint56
Спасибо...
Автор: Baton34V
Дата сообщения: 28.08.2012 16:01
Snoopak96
да мне исходное состояние не нужно, я хочу смысл понять что там происходит, а команды не знаю.
SotM
а ты видимо не первый раз даёшь глупый ответ.
Автор: MOD_TEC
Дата сообщения: 28.08.2012 17:50
vint56
А как на финишной странице передвинуть текструированную кнопку через ботву....
Автор: YURSHAT
Дата сообщения: 28.08.2012 19:13
MOD_TEC

Цитата:
А как на финишной странице передвинуть текструированную кнопку через ботву...

Я конечно не vint56, но пример подкину

Код: Procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
BtnSetPosition(hNextBtn, ScaleX(слева),ScaleY(сверху),ScaleX(ширина),ScaleY(высота));
end;
Автор: SotM
Дата сообщения: 28.08.2012 19:38
Baton34V
Поиск еще никто не отменял, это уже обсуждалось много раз. Зачем каждый раз одно и тоже обсуждать?
Автор: MOD_TEC
Дата сообщения: 28.08.2012 19:50
YURSHAT
Спасибо... Незнаешь случайно как чекбоксу текструированному через ботву
задать функцию, чтобы при выборе устанавливался дополнительный софт через
секцию [Code]....
Вот код:
procedure Soft(CurStep: TSetupStep);
var res: integer; ErrorCode : Integer;
begin
if (CurStep = ssPostInstall) and not ISDoneError then begin
If LabelCheckBox.Checked then begin
#ifdef PhysX
ShellExec('', ExpandConstant('{#RedistFolder}\{#PhysX}'),'/qn', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
#endif
#ifdef GameForWindows
ShellExec('', ExpandConstant('{#RedistFolder}\{#GameForWindows}'),'/qn', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
#endif
#ifdef DirectX
Exec(ExpandConstant('{#RedistFolder}\{#DirectX}'), '', ExpandConstant('{#RedistFolder}'), SW_SHOW, ewWaitUntilTerminated, Res);
#endif
#ifdef DotNet
Exec(ExpandConstant('{#RedistFolder}\{#DotNet}'), '', ExpandConstant('{#RedistFolder}'), SW_SHOW, ewWaitUntilTerminated, Res);
#endif
#ifdef VCx64
if isWin64 then
Exec(ExpandConstant('{#RedistFolder}\{#VCx64}'), '/Q', ExpandConstant('{#RedistFolder}'), SW_SHOW, ewWaitUntilTerminated, Res)
else
#endif
#ifdef VCx86
Exec(ExpandConstant('{#RedistFolder}\{#VCx86}'), '/Q', ExpandConstant('{#RedistFolder}'), SW_SHOW, ewWaitUntilTerminated, Res);
#endif
end;
end;
end;
Автор: YURSHAT
Дата сообщения: 29.08.2012 01:35

Цитата:
Незнаешь случайно как чекбоксу текструированному через ботву
задать функцию, чтобы при выборе устанавливался дополнительный софт через
секцию
Код: ....

Давайте разберемся с теорией
1. Ботва НЕ текстурирует кнопки, она создает свои.
2. Ботва не текстурирует чекбоксы, она создает кнопки, которые имеют 8 состояний, аналог чекбокса.

Теперь по теме:
[more=Ткнуть][code]#define DirectX

#include "Modules\botva2.iss"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

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

[CustomMessages]
rus.DirectX=Обновить DirectX
rus.DirectXInstall=Идет обновление DirectX...

[Files]
Source: "Files\*"; DestDir: "{tmp}"; Flags: dontcopy

[Code_]
var
DirectXCheck : HWND;
DirectXLabel : TLabel;

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
Result:=True;
end;

procedure DirectXClick(hBtn:HWND);
begin
if BtnGetChecked(hBtn) then DirectXLabel.Font.Color:=clBlue else DirectXLabel.Font.Color:=clBlack;
end;

procedure DirectXLabelClick(Sender:TObject);
begin
BtnSetChecked(DirectXCheck, not BtnGetChecked(DirectXCheck));
DirectXClick(DirectXCheck);
end;

procedure RedesignWizardForm;
begin
ExtractTemporaryFile('CheckBox.png');

#ifdef DirectX
//создаем чекбокс
DirectXCheck:=BtnCreate(WizardForm.SelectDirPage.Handle, ScaleX(0),ScaleY(120),ScaleX(28),ScaleY(28),ExpandConstant('{tmp}\CheckBox.png'),0,True);
BtnSetEvent(DirectXCheck,BtnClickEventID,WrapBtnCallback(@DirectXClick,1));
BtnSetCursor(DirectXCheck,GetSysCursorHandle(32649));

// создаем надпись к нему
DirectXLabel := TLabel.Create(WizardForm);
with DirectXLabel do begin
AutoSize:=False;
SetBounds(ScaleX(35), ScaleY(128), ScaleX(145), ScaleY(17));
OnClick:= @DirectXLabelClick;
Cursor:= CrHand;
Caption := ExpandConstant('{cm:DirectX}');
Parent := WizardForm.SelectDirPage;
end;
#endif
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
case CurStep of
ssPostInstall: begin
#ifdef DirectX
if BtnGetChecked(DirectXCheck) then begin
WizardForm.StatusLabel.Caption := ExpandConstant('{cm:DirectXInstall}');
Exec(ExpandConstant('{src}\Redist\DirectX 9\DXSETUP.exe'), '/silent', ExpandConstant('{src}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
#endif
end;
end;
end;

procedure DeinitializeSetup;
begin
gdipShutdown;
end;
Автор: Baton34V
Дата сообщения: 29.08.2012 08:45
SotM
если внимательно прочитать мой первый вопрос

Цитата:
что-то отдаленно похожее на асм. Как его прочитать? есть какие-то маны?

то становится ясно что меня интересует интерпретация команд псевдоасемблера на русский язык, сам ассемблер я когда-то изучал, но в данном случае мне не всё понятно.
зы: ваши ответы такие ответы...
Автор: MOD_TEC
Дата сообщения: 29.08.2012 10:55
YURSHAT
Респект....
Большое спасибо...



Добавлено:
Как текструировать DirEdit и GroupEdit через ботву....
http://forum.oszone.net/attachment.php?attachmentid=86860&d=1346232221

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


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