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

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

Автор: ShamaN
Дата сообщения: 07.11.2008 13:02
Можно ли сделать ехе нераспаковываемым, но без ввода пароля при установке?
Автор: ExpeditorR
Дата сообщения: 07.11.2008 13:02
Artem_Butenko

Цитата:
(пожалуйста изучите структуру этих патчей, во избежание опрометчивых выводов)

Изучил... ничего особенного.
Я ставил патч S.T.A.L.K.E.R. v1.001. Сразу же на странице приветствия я полез во временную папку Inno и посмотрел, что там лежит и собственно обнаружил библиотеку patchtool.dll, которая скорее всего и птчит файлы через секцию [code], собственно как я и предлагал. Передаётся ей возможно путь к файлу оригиналу и путь к файлу с изменениями которые нужно внести. Кабы точно знать, как ей передавать параметры, то и прогресс бар соорудить не долго. Ещё специально для вас список патчеров с описаниями, может среди них найдёте нужный для вас. Ссылка


Добавлено:
ShamaN

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

В каком смысле, чтбы нельзя было выпотрошить ресуры из ехе или как? Если да, то смотрите в сторону протекторов ехе файлов, типа Армадилло и т.п. Если нет, то можно тогда поподробней, лично мне не понятна задача.
Автор: Artem_Butenko
Дата сообщения: 07.11.2008 14:23
Sampron

Спасибо за совет, но как увязать функцию function RenameFile(const OldName, NewName: string): Boolean; в паскаль скрипте Inno, я не знаю. Кроме того, главной задачей до сих пор является возможность возвращения исходных имен файлов и папок при деинсталляции дополнительного контента к какому-либо приложению.

ExpeditorR

Большое Вам спасибо за проявленное внимание и полезные ссылки!
Автор: Diawer
Дата сообщения: 07.11.2008 17:57
htuos

Цитата:
тут вроде где-то были примеры как их делать

А где посмотреть, я нашел только для компонентов, но там подсказки отображаются которые сам прописываешь, это не то.
Автор: Snake193
Дата сообщения: 07.11.2008 21:09
Пожалуйста, оч. нужно!
Как в инно встроить распаковку внешнего RAR архива через библиотеку unrar.dll. Видел такой инсталлятор, сделанный в NSIS. В папке валялись Setup.exe, unrar.dll, GAME.RAR. Распаковка происходила именно через библиотеку. И к тому же на месте стандартного прогрессбара показывался прогрессбар и список распаковываемых файлов (как в самом WinRAR'е) из архива.

Пример: http://s1.ipicture.ru/uploads/081107/j9VfZ0nywh.jpg
Автор: htuos
Дата сообщения: 07.11.2008 21:24
Diawer

Цитата:
А где посмотреть, я нашел только для компонентов, но там подсказки отображаются которые сам прописываешь, это не то.

если память не изменяет, список компонентов - TNewCheckListBox
так что разницы нету. чем тебя этот способ не устраивает?
Автор: Artem_Butenko
Дата сообщения: 07.11.2008 21:26
Ребята, выручайте, сил больше нет. Я все с тем же вопросом с 70 страницы. Поясню его подробнее. Я приводил пример скрипта "тихого" инсталла, в котором на определенном этапе выполняется запуск стороннего приложения. Так вот, в этот момент заголовок окна "тихого" инсталла появляется на панели быстрого запуска. Как с этим бороться? Буду очень благодарен за любую помощь!
Автор: Snake193
Дата сообщения: 08.11.2008 00:25
Еще вопросы:
Перешел на ЗЫ 3 и ГРОБ360 и инсталляторы не делал почти год. Пока просматривал 70 страниц форума, нашел скрипты для библиотеки GameInstallHelper.dll.
Тупой вопрос - что это за библиотека такая, для чего она нужна, для какой Винды, что где регистрирует, есть ли еще какие-либо аналогичные библиотеки и, если игра в оригинальном инсталляторе использовала её, то чем грозит её отсутствие в моем?
И еще вопрос, т.к. Виста Г.ВНО (с большой буквы), сижу на 32-битной XP. Может ли что-нибудь в моем инсталляторе некорректно работать в Висте, хотя у меня всё идеально? Может стоит сделать виртуальную машину с Вистой для тестов?
Просьба, напишите на основе какой-либо современной игры (Assassin's Creed, BioShock etc) подробный текстовик с описанием работы библиотеки, парой примеров и т.п. и выложите его. Victor_Dobrov, serg_aka_lain, Genri и другие неупомянутые здесь (надеюсь не обидел никого отсутствием ника) ОЧЕНЬ ПРОШУ ПОПОДРОБНЕЙ!!!

Добавлено:
Кстати, где-то выше спрашивали как стелать MsgBox как в STALKER'е, где при повторном запуске инсталлятора вылетал вопрос о запуске игры. Когда-то давно уж я придумал себе такой скрипт. Недавно его усовершенствовал - теперь вылетает сообщение с кнопками Да (запускается игра, инсталлятор закрывается), Нет (игра не запускается, запускается инсталлятор), Отмена (ничего не делается, закрывается инсталлятор). Запуск самой установки нужен если, например, пользователь удалил папку с игрой, а данные в реестре остались. И чтобы самому не лазать по реестру и сделал такой код:

Цитата:

[Code_]
var
AppDir: string;
ResultCode: Integer;

procedure ReadEntries();
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GFI\Ghost Recon', 'InstallPath', AppDir);
end;

function InitializeSetup(): Boolean;
var
Exe: string;
begin
Exe:='GhostRecon.exe';
if (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\GFI\Ghost Recon', 'InstallPath')) then
begin
ReadEntries;
case (MsgBox('Игра ' + ExpandConstant('{cm:ProductName}') + ' уже найдена на Вашем компьютере. Запустить игру?', mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON3)) of
IDYES:
begin
if (FileExists(AddBackslash(AppDir) + Exe)) then
begin
Exec(AddBackslash(AppDir) + Exe, '', ExtractFilePath(AddBackslash(AppDir) + Exe), SW_SHOW, ewNoWait, ResultCode);
end else begin
MsgBox('Невозможно запустить ' + ExpandConstant('{cm:ProductName}') + ', т.к. исполняемый файл программы не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1);
end
Result:=False;
end
IDNO:
begin
Result:=True;
end
IDCANCEL:
begin
Result:=False;
end
end
end else begin
Result:=True;
end
end;


Не ругайтесь на лишние begin end, это для того, чтобы удобней было читать код.
Автор: serg_aka_lain
Дата сообщения: 08.11.2008 03:00
Snake193

Цитата:
если игра в оригинальном инсталляторе использовала её, то чем грозит её отсутствие в моем?

Ничем, просто не будут созданы ярлыки в Vista GameExplorer и всё.
Можно как и всегда на десктопе и в Пуске - Программы, но если серьёзно, то всёж надо
эту библиотеку юзать.

Цитата:
для какой Винды, что где регистрирует

Vista x86 - x64 , GameExplorer.

Цитата:
Может ли что-нибудь в моем инсталляторе некорректно работать в Висте, хотя у меня всё идеально?

В XP тоже создаёт запись в реестре и ярлыки, вероятно подразумевается что юзер обновит XP до Vista, и эти ярлыки будут работать.

Цитата:
Может стоит сделать виртуальную машину с Вистой для тестов?

Думаю стоит.
З.Ы. Описание чуть позже. (если всёж нужно).


Автор: Snake193
Дата сообщения: 08.11.2008 04:18
to serg_aka_lain
Благодарю, конечно, если не трудно напишите пожалуйста!

Конкретно меня интересовало (обсуждалось выше):

ArchitecturesAllowed=x86 x64 ia64
ArchitecturesInstallIn64BitMode=x64 ia64

Как я понял в Висте два реестра 32 и 64-битные разделы. Инсталлятор скомпилирован в 32-б. XP ну и сам естественно 32-бита. Если заполнить эти директивы, то инно некорректно и нетуда записывает 32-битный ключ в "HKLM\SOFTWARE\", а если их оставить пустыми, то все нормально - 32-б. данные записываются в одну ветку реестра, а 64-б. в другую. Верно я понял? А 64x нормально запускают 32x, как родные?

Прошу не смеяться над глупыми вопросами, просто всегда сидел в XP, никогда не ставил ни XP x64 , ни 32 и 64 -битные Висты. Висту вообще в глаза не видел!

З.Ы. А с виртуальной машиной надо в ближайщее время решить вопрос. Хоть посмотреть что за ось такая!
Автор: KurtWagner
Дата сообщения: 08.11.2008 05:17
Diawer так я знаю! вопрос с *.dll
а как без этого чтоб инсталер сам определял!!!???
Автор: STRATOSV
Дата сообщения: 08.11.2008 08:57
Привет Камрады.
Опять нужна Ваша помощь и подсказка.
Выношу при Инстале ярлык бат файла на Рабочий Стол - он/ в смысле этот батник/ без Иконки. Мне нужно снабдить его Иконкой. В теме мне уже подсказывали что за это отвечает пункт IconFilename: - вписываю в этот раздельчик название своей иконки. В итоге один хрен на рабочем столе , на Батнике картинки НЕТ. Просто белый файл.
Вот как вписал направление на картинку с расширением .ico
[Icons]
Name: "{userdesktop}\Brancampaign_retrofit.bat"; Filename: "{app}\Brancampaign_retrofit.bat"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\Моя Иконка.ico"; IconIndex: 0
Гляньте Ребята может я опять чё ни так сделал - очень хотца картинку на ярлык нацепить.
Автор: Diawer
Дата сообщения: 08.11.2008 11:23
KurtWagner
А чем не устраивает .dll.
Автор: STRATOSV
Дата сообщения: 08.11.2008 14:37
Ребята. Ну кто нибудь сможет мне помочь разобраться как мне в своём Скриптике к Ярлыку на рабочий Стол Иконку прицепить.
И ещё как же всё таки в скрипте дописать Инфу по - Требуемому свободному Месту на Диске. Или подскажите как подправить Скриптик чтобы ваще небыло сей Инфы
Ну и как всё таки убрать к низу сам Индикатор Распаковки 7zipa распаковка которого прописана в Инсталяторе
Все Варианты ответов сделаных выше Неподходят
Извиняюсь за назойливость...
Правда Ооочень Нужно
Оччень надеюсь на Помощь
На всякий Случай ещё один раз [more=Скриптик][Setup]
AppName=Bran_retrofit
AppVerName=Моя Проба 1.0
AppPublisher=StrategyStrat
DefaultDirName={sd}\SEGA\Medieval II Total War\mods\Bran_retrofit
DefaultGroupName=Bran_retrofit
AllowNoIcons=yes
WizardImageFile=D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\2.bmp
WizardSmallImageFile=D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\1.bmp
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
OutputDir=E:\SEGA
OutputBaseFilename=setup
SetupIconFile=E:\SEGA\FFF\1.ico

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

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

[Files]
Source: "E:\SEGA\FFF\Bran_retrofit.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{app}\Bran_retrofit.exe"; DestDir: "{app}"; Flags: ignoreversion external deleteafterinstall

Source: "isxbb.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\BRUEGEL.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN1.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN10.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN11.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN12.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN13.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN14.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN2.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN3.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN4.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN5.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN6.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN7.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN8.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\САЙД ШОУ 2\SKRIN9.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\Ny Moding\ГРАФИКА\ИКОНКИ для МОДА\splash.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "bass.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "innocallback.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "D:\APEX-VADIM\МУЗЫКА\МУЗОН ЭТНО И тд\Vangelis\El Greco\07 Movement VII.MP3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[Icons]
Name: "{userdesktop}\Brancampaign_retrofit.bat"; Filename: "{app}\Brancampaign_retrofit.bat"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\Brancampaign_retrofit.bat"; IconIndex: 0
Name: "{group}\{cm:UninstallProgram,Bran_retrofit}"; Filename: "{uninstallexe}"

[Run]
Filename: "{app}\Bran_retrofit.exe"; WorkingDir: "{src}"; Parameters: "-y"; StatusMsg: "Процесс Установки Мода..."; Flags: waituntilterminated

[UninstallDelete]
Type: filesandordirs; Name: "{app}"

[_ISTool]
EnableISX=True

[Code]
type
HSTREAM=DWORD;
TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
const
BackGround=6;
Timer=16;
Indent=25;

var
MP3List:TStringList;
CurrentMP3:integer;
hMP3:HWND;
TimerID:LongWord;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): integer; external 'isxbb_AddImage@files:isxbb.dll stdcall delayload';
function isxbb_Init(hWnd: Integer): integer; external 'isxbb_Init@files:isxbb.dll stdcall delayload';
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 ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
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):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
if BASS_ChannelIsActive(hMP3)=0 then begin
BASS_Stop;
BASS_StreamFree(hMP3);
hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
BASS_Start;
if hMP3<>0 then
if BASS_ChannelPlay(hMP3,True) then begin
CurrentMP3:=CurrentMP3+1;
if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
end;
end;
end;

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('07 Movement VII.MP3');
MP3List:=TStringList.Create;
MP3List.Add(ExpandConstant('{tmp}')+'\07 Movement VII.MP3');
CurrentMP3:=0;
Result:=True;
end;

procedure InitializeWizard;
begin
WizardForm.Position:=poScreenCenter;
MainForm.BorderStyle:=bsNone;
MainForm.Width:=GetSystemMetrics(0);
MainForm.Height:=GetSystemMetrics(1)+1;
MainForm.Top:=-1;
MainForm.Left:=0;
ExtractTemporaryFile('splash.bmp');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.bmp',1000,3000,1000,0,255,False,$FFFFFF);
TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
    BASS_Init(-1,44100,0,0,0);
BASS_SetConfig(5,100);
BASS_SetConfig(6,100);
ExtractTemporaryFile('BRUEGEL.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\BRUEGEL.jpg',BackGround);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
MainForm.Visible:=True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('SKRIN1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN1.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN2.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN2.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN3.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN3.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN4.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN5.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN5.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN6.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN6.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN7.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN7.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN8.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN8.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN9.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN9.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN10.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN10.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN11.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN11.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN12.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN12.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN13.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN13.jpg',BackGround or Timer);
ExtractTemporaryFile('SKRIN14.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\SKRIN14.jpg',BackGround or Timer);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
isxbb_StartTimer(8,BackGround)
end;
if CurStep=ssPostInstall then begin
isxbb_KillTimer(BackGround);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(MainForm.Height-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if CurPageID=wpFinished then begin
WizardForm.Visible:=False;
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Left:=(MainForm.Width-WizardForm.Width) div 2;
WizardForm.Top:=(MainForm.Height-WizardForm.Height) div 2;
WizardForm.Visible:=True;
end;
end;

procedure DeinitializeSetup;
begin
KillTimer(0,TimerID);
BASS_Stop;
BASS_Free;
MP3List.Free;
end;[/more]
Автор: Snake193
Дата сообщения: 08.11.2008 15:08
STRATOSV
[Icons]
Name: "{userdesktop}\Brancampaign_retrofit.bat"; Filename: "{app}\Brancampaign_retrofit.bat"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\Brancampaign_retrofit.bat"; IconIndex: 0

А почему у тебя ссылка вместо иконки сделана на BAT файл? БАТЫ - это всего лишь текстовики с другим расширением. Иконки нужно грузить или из *.ICO или из *.EXE.
Автор: STRATOSV
Дата сообщения: 08.11.2008 15:22
Мод в Игре Грузиться через Бат файл. В котором уже отписано направление на EXE
Если просто задать направление на Родной Эзешник будет грузиться Просто Игра а не Мод.
Может можно задать как нибудь единую группу. Чтобы одна Строка была с Батом а вторая с Иконкой/ ну типо накладывающейся на ярлык Батника - который на Рабочем Столе??
Или может ещё как это сделать
Автор: Snake193
Дата сообщения: 08.11.2008 17:12
Пример

Цитата:
[Icons]
Name: "{userdesktop}\Brancampaign_retrofit"; Filename: "{app}\Brancampaign_retrofit.bat"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\Game.ico"


Запускается "Brancampaign_retrofit.bat", иконка грузится из "Game.ico". IconIndex убрал, - он нужен в том случае, если иконка грузится из EXE или DLL. Там иконок может быть множество и тогда выбирается нужная в IconIndex:<номер иконки>.
Автор: serg_aka_lain
Дата сообщения: 08.11.2008 17:32
STRATOSV

Цитата:
И ещё как же всё таки в скрипте дописать Инфу по - Требуемому свободному Месту на Диске. Или подскажите как подправить Скриптик чтобы ваще небыло сей Инфы


В секции
[_Setup]

; 1048576 bytes = 1 megabyte (если архив 2Gb, то 2000Mb х 1048576 = 2097152000)
ExtraDiskSpaceRequired=2097152000

Если убрать то так
procedure InitializeWizard();
begin
WizardForm.DiskSpaceLabel.Hide;
end;
ИМХО не правильное решение.


Добавлено:
Snake193

Цитата:
ArchitecturesAllowed=x86 x64 ia64
ArchitecturesInstallIn64BitMode=x64 ia64


Если приложение 32битное, то эти директивы указывать не нужно,
ключи в реестр запишутся правильно
"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ ... "
з.ы.
ArchitecturesAllowed= и
ArchitecturesInstallIn64BitMode= - для 64битного режима установки.
Автор: STRATOSV
Дата сообщения: 08.11.2008 19:42
Спасибо Камрады Snake193 и serg_aka_lain
за Помощь но..
С Иконкой после Инстала опять трабла, на Рабочем Столе вот это

А пересчёт свободного места да Работает но я так думаю наверное числитель должен быть немного менше

Считал вот так
[Setup]
; 1048576 bytes = 1 megabyte (если архив 1.45Gb, то 1450Mb х 1048576 = 1520435200)
ExtraDiskSpaceRequired=1520435200
Блин пока писал понял что числитель не ошибся, всё нормально просто при пересчёте Автоматом добавляеться к 1450 Мб вес Инстал Пакета 284 Мб в итоге оно и получилось 1734
А вот с Иконкой чёй то никак не выходит

Автор: NEW_MAKC
Дата сообщения: 08.11.2008 19:46
подскажите пожалуйста, связался с Inno первый раз.

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



везде, кроме первой ошибки, где как я понял надо ввести имя компилируемого файла, проблемма в какойто проверке (в конце каждой из строк содержащих ошибку)

имя файйла для компиляции ввёл, проверку в каждом из трёх случаев убрал и запустил компиляцию. вроде пошло, но через какое то время выдало ошибку связанную с размером выходного файла (в сообщении присутствовала цифра помойму 2000000000. места на диске валом и система ntfs)

в чём ошибка данного скрипта? или моя. объясните пожалуйста.

в оригинале запакованный инсталятор состоял из следующих файлов:

setup-1.bin 1.95 gb
setup-2.bin 1.07 gb
setup.exe 1.09 mb

вот сам скрипт

http://ifolder.ru/8973586
Автор: serg_aka_lain
Дата сообщения: 08.11.2008 20:00
NEW_MAKC

Цитата:
размером выходного файла (в сообщении присутствовала цифра помойму 2000000000. места на диске валом и система ntfs)

в чём ошибка данного скрипта? или моя. объясните пожалуйста.

в оригинале запакованный инсталятор состоял из следующих файлов:

надо разбивать на части, одним файлом ".ехе" или ".bin", к примеру может быть не более 2Гб(2100000000), так что используй директивы в секции
[Setup]
DiskSpannig=True
DiskSliceSize=2100000000


Добавлено:
STRATOSV

Цитата:
добавляеться к 1450 Мб вес Инстал Пакета 284 Мб

наоборот, к пакету добавляется 1450 Мб

С иконкой ... , ну всё должно работать
Name: "{commondesktop}\My Batch"; Filename: "{app}\Mod\bat.bat"; Iconfilename: "{app}\RA3.exe"; IconIndex: "0"; WorkingDir: "{app}";
Автор: Snake193
Дата сообщения: 08.11.2008 21:47
А что за директива AppMutex и как ее использовать, давно интересно. А то в справке мудрено написано, че то про повторный запуск или типа того? Спасибо.
Автор: iltmpz
Дата сообщения: 08.11.2008 22:49
Вопрос: на странице, где надо выбирать список устанавливаемых компонент можно ли как-нибудь выводить еще описания, кроме названий?
Т.е. пользователь кликает на компонент, и где-то (сбоку или снизу) выводится подробное описание - пара строк текста - для чего нужен этот компонент?

Кажется, очень полезная фишка была бы, только вот нигде не нашел.
Автор: Sig666
Дата сообщения: 08.11.2008 23:31
Господа, подскажите по след. задаче. Написал процедуру, которая вызывается по AfterInstall из [files]. Суть ее - запустить программу, и если код возврата программы не 0, то завершить работу установщика с откатом. Пробовал

procedure _test();
var rescode:integer;
begin
exec(expandconstant('{src}\test.exe'), '' , '', sw_show, ewwaituntilterminated, rescode);
if rescode<>0 then
abort;
end;

- не катит, выдает ошибку и продолжает установку как ни в чем не бывало.
Автор: Snake193
Дата сообщения: 09.11.2008 01:06
для iltmpz

Вот интересная вещь:
http://restools.hanzify.org/article.asp?id=78

то что тебе нужно. Внизу страницы ссылка для закачки архива.
Автор: iltmpz
Дата сообщения: 09.11.2008 01:35
Snake193
Огромное спасибо!
Действительно то, что нужно.
Я уж было собрался менять инсталлятор - думал, что innosetup так не умеет, а тут - вот оно.
Автор: KurtWagner
Дата сообщения: 09.11.2008 03:50
Diawer каждый раз писать на папку команду не охота... да и к тому же разделять их... а у мя та... команда через /* Source: "C:\files\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
хотелось бы че нибудь с этим сотворить та...

Добавлено:
КАК СЛЕПИТЬ ДВА КОДА ??? реально уже сил нет[more]как слепить 2-ва кода


[_Code]
var
InstallLocation: String;
errCode: Integer;
procedure InitializeWizard();
var
MD5: String;
begin
MD5 := GetMD5OfString('сool')
WizardForm.PasswordEdit.Visible:= False;
WizardForm.PasswordEdit.Text:= MD5;
end;
type TSystemTime = record wYear, wMonth, wDayOfWeek, wDay, wHour, wMinute, wSecond, wMilliseconds: word; end;

procedure GetLocalTime(var lpSystemTime: TSystemTime); external 'GetLocalTime@kernel32 stdcall delayload';
function SystemTimeToFileTime(const lpTime: TSystemTime; var lpFileTime: TFileTime): Boolean; external 'SystemTimeToFileTime@kernel32 stdcall delayload';
function CompareFileTime(const lpFileTime1, lpFileTime2: TFileTime): LongInt; external 'CompareFileTime@kernel32 stdcall delayload';

#ifdef TimeLimit
Function TimeLimit: Boolean; var lt, dateLimit: TSystemTime; LocalTime, LimitTime: TFileTime;
Begin
#for {M[0] = 59; Pos(':', TimeLimit); M[0]++} M[M[0]] = Int(Copy(TimeLimit,,Pos(':', TimeLimit)-1)), TimeLimit = Copy(TimeLimit,Pos(':', TimeLimit)+1)
#expr M[M[0]] = TimeLimit
dateLimit.wYear:= {#Int(M[59])}; dateLimit.wMonth:= {#Int(M[60])}; dateLimit.wDay:= {#Int(M[61])}; dateLimit.wHour:= {#Int(M[62])}; dateLimit.wMinute:= {#Int(M[63])};
GetLocalTime(lt); SystemTimeToFileTime(lt, LocalTime); SystemTimeToFileTime(dateLimit, LimitTime)
Result:= not(CompareFileTime(LimitTime, LocalTime) = -1)
End;
#endif
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
Autorun : Boolean;
begin

Autorun := RegKeyExists(HKLM,'SOFTWARE\{#Author}\');
if Autorun =true then
begin
Result := true;
end;
if Autorun = false then
begin
Autorun := RegKeyExists(HKLM,'SOFTWARE\{#Reglnk}');
if Autorun =true then
begin
Result := true;
end;

if Autorun =false then
begin

Result:=false;
end
else
begin
Result:=false;
ShellExec('open', ExpandConstant('{reg:HKLM\Software\{#Reglnk},{#lnk}|}') + '\{#MyAppExeName}', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
begin
if not TimeLimit then MsgBox('&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;! &#194;&#251; &#232;&#241;&#247;&#229;&#240;&#239;&#224;&#235;&#232; &#235;&#232;&#236;&#232;&#242; &#226;&#240;&#229;&#236;&#229;&#237;&#232;, &#226; &#242;&#229;&#247;&#229;&#237;&#232;&#232;'#10'&#234;&#238;&#242;&#238;&#240;&#238;&#227;&#238; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#234;&#224; &#239;&#240;&#232;&#235;&#238;&#230;&#229;&#237;&#232;&#255; &#225;&#251;&#235;&#224; &#240;&#224;&#231;&#240;&#229;&#248;&#229;&#237;&#224;.'#10#10'&#208;&#229;&#234;&#238;&#236;&#229;&#237;&#228;&#243;&#229;&#242;&#241;&#255; &#239;&#238;&#235;&#243;&#247;&#232;&#242;&#252; &#237;&#238;&#226;&#243;&#254; &#226;&#229;&#240;&#241;&#232;&#254; &#239;&#240;&#238;&#227;&#240;&#224;&#236;&#236;&#251;.', mbError, MB_OK)
else Result:= True;
end;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;[/more]
Автор: Diawer
Дата сообщения: 09.11.2008 09:11
При установке программы “Universal Extractor” понравилась такая штука, там, на странице “Выбора дополнительных задач” сделали языковое меню, где в зависимости от выбранного языка копируется тот или иной языковый модуль (файл), но главное это меню выполнено в виде выпадающего, т.е. в одну строчку и при нажатии на стрелочку справа вываливается весь список, вообщем как в Inno вначале.
Может, у кого завалялся такой код.


Добавлено:
Как по другому не знаю.

Добавлено:
KurtWagner
Автор: GriSky
Дата сообщения: 09.11.2008 11:28
Подскажите как вставить в инсталятор дополнительное окно с фомой ввода данных, нужен Nik, password, IP чтоб эти данные можно было вставить в конфигурационные файлы.
IP и password нужен для INI файла
А вот Nik и password необходимо вставить в текстовый файл, просто дописанием строчки
Конечно лучше было бы больше данных, вот что надо вообще по оптималу:
{Nik}
{RCON_password}
{amx_password}
{pbot_password}
{IP}
Вставлять нужно сюда:

config.ini
GameServerAddr={IP}
GameServerPass={RCON_password}
HostConnectList={IP}

config.cfg
name "{Nik}"

autoexec.cfg
setinfo _pw "{amx_password}"
setinfo "_pbadminpw" "{pbot_password}"

users.ini
"{Nik}" "{amx_password}" "abcdefghijklmnopqrstu" "a"

Вот так надо, это Counter Strike с модом и античитом, кто знает как сделать, подскажите, строки дописываются как есть = нигде не забыл.
Спасибо.
Автор: Diawer
Дата сообщения: 09.11.2008 11:52
iltmpz
Вот переделал вариант от друзей китайцев, а именно поменял расположение окон, в оригинале как мне кажется, не грамотно используется пространство, высоту подсказки меняются сменой пары цифр, может понравиться. [no][more][/no][Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

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

[CustomMessages]
english.ComponentsName1=My program™
russian.ComponentsName1=Моя программа™
english.ComponentsName1_1=English version
russian.ComponentsName1_1=Английская версия
english.ComponentsName1_2=Russian version
russian.ComponentsName1_2=Русская версия
english.ComponentsName2=Help
russian.ComponentsName2=Помощь
english.ComponentsName2_1=Documentation
russian.ComponentsName2_1=Документация
english.ComponentsName2_2=User manual
russian.ComponentsName2_2=Руководство пользователя
english.ComponentsInfoPanel1=Description
russian.ComponentsInfoPanel1=Описание
english.ComponentsInfoPanel2=Direct the cursor a mouse on component to read his description.
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
english.ComponentsDescription1=Necessarily is fixed
russian.ComponentsDescription1=Устанавливается обязательно
english.ComponentsDescription2=Install english version
russian.ComponentsDescription2=Установить английскую версию
english.ComponentsDescription3=Install russian version
russian.ComponentsDescription3=Установить русскую версию
english.ComponentsDescription4=Help
russian.ComponentsDescription4=Помощь
english.ComponentsDescription5=Read documentation
russian.ComponentsDescription5=Прочитать документацию
english.ComponentsDescription6=Read user manual
russian.ComponentsDescription6=Прочитать руководство пользователя

[Components]
Name: main; Description: {cm:ComponentsName1}; Types: full custom; Flags: fixed
Name: main\english; Description: {cm:ComponentsName1_1}; Flags: exclusive
Name: main\russian; Description: {cm:ComponentsName1_2}; Flags: exclusive
Name: help; Description: {cm:ComponentsName2}; Types: full custom
Name: help\documentation; Description: {cm:ComponentsName2_1}; Types: full custom
Name: help\manual; Description: {cm:ComponentsName2_2}; Types: full custom

[Files]
Source: compiler:descctrl.dll; Flags: dontcopy

[Messages]
ComponentsDiskSpaceMBLabel=

[Code]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:=False;
WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Width := ScaleX(417);

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(190);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(417);
InfoPanel.Height := ScaleY(38);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(403);
Info.Top := ScaleY(12);
Info.Height := ScaleY(24);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
ExpandConstant('{cm:ComponentsDescription1};')+
ExpandConstant('{cm:ComponentsDescription2};')+
ExpandConstant('{cm:ComponentsDescription3};')+
ExpandConstant('{cm:ComponentsDescription4};')+
ExpandConstant('{cm:ComponentsDescription5};')+
ExpandConstant('{cm:ComponentsDescription6};')
);
end;[no][/more][/no]


Добавлено:
Извеняюсь тэг с Ашибкой написал.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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