Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Dodakaedr
08-07-2014, 21:20
Подскажите как реализовать эту строку в секции ?
[CODE]Source: "{Settings}\FSSettings,eng,reg.db"; DestDir: "{app}"; DestName: "FSSettings.db"; MinVersion: "0.0,5.0"; Check: PortableCheck and RegCheck and EngCheck; Flags: ignoreversion
P.S. Суть вопроса в том что через секцию [Files] сочетание троих кнопок (радиокнопка и два чекбокса) проверка (функция Check) не работает. Хочу узнать и попробовать как это через секцию [Code] проделать...особенно извлечение с переименовыванием. Спасибо!
Все разобрался в чем был косяк, но все равно интересно реально ли такое через секцию [Code] сделать. Кто знает подскажите, пожалуйста.
Dodakaedr, может как-то так?
[Files]
Source: "{Settings}\FSSettings.eng.reg.db"; MinVersion: "0.0,5.0"; Flags: ignoreversion dontcopy
[Сode]
...
ExtractTemporaryFile('FSSettings.eng.reg.db');
if (PortableCheck and RegCheck and EngCheck) then
FileCopy(ExpandConstant('{tmp}\FSSettings.eng.reg.db'), ExpandConstant('{app}\ FSSettings.db'), false);
Добрый день! Подскажите, в чем может быть проблема. Делала установщик одной игры. Все было отлично. Потом вышло обновление игры, я обновила её. Передела архив .bin (FreeArc-ом запаковываю). В самом скрипте изменила только версию игры. Больше ничего не трогала. Так вот, теперь во время установки, распаковка доходит до 85.9 % и дальше никак, стоит на месте. Уже несколько раз и архив .bin переделывала, и скрипт заново создавала. Ничего не помогает, доходит до 85.9 % и останавливается :( Что это может быть?
А, и игру заново переустанавливала с офсайта, результат тот же.
Kashtan007
09-07-2014, 17:18
Всем привет, как в установщике сделать прозрачный фон под надписями, чтобы было видно картинку?
http://rghost.ru/56805946/image.png
Заранее спасибо за ответ!
P.S. у меня установщик большого размера, как сделать так, чтобы когда открываешь его он был по центру монитора, а то получается нижняя часть прячется за панель задач.
habib2302
09-07-2014, 18:10
Irenis, а в скрипте поменяла расширение файла?
Доброго времени суток!
А нет ли в инно возможности сравнивать строки по маскам или использовать регулярные выражения? Нужно проверять, что директория, задаваемая пользователем является действительно валидной директорией (с буквой диска вначале или в форме UNC). Т е нужна реализация чего-то типа стандартной проверки инно при задании директории установки. Может кто помочь советом/кодом?:)
Irenis, а в скрипте поменяла расширение файла? »
Нет, расширение не меняла, так как это не требовалось. Там и так было bin. Тем более, если бы что то было не так с расширением в скрипте, то вообще ничего не распаковывалось, а выдало ошибку. А тут вроде все нормально, распаковывается, но на 85.9 % останавливается и дальше никак, сколько не жди.
ничего не распаковывалось, а выдало ошибку »
Irenis, Каким методом упакован архив и через что?
как в установщике сделать прозрачный фон под надписями, »
Kashtan007,
Transparent:=True;
Каким методом упакован архив и через что? »
Ну я пока только одним методом все делала, FreeArc-ом. Просто добавляю файлы игры в архив, переименовываю в bin, сжатие ставлю либо нормальное, либо высокое, и все, больше ничего не трогаю, нажимаю ОК. Других методов, честно говоря не знаю, так как до этого никаких проблем не возникало.
Irenis, Попробуйте сжать и распаковать вот небольшой примерчик.
http://rghost.ru/56811699
1- В папку packeddata закиньте файлы какие необходимо сжать.
2- Запустите lzma.bat.
3- В папке data получите готовый архив.
Shift85, спасибо, попробую))
Kashtan007
09-07-2014, 22:44
Shift85, спасибо большое), а куда эту строку засунуть?
куда эту строку засунуть? »
Kashtan007, Пример.
FreeSpaceLabel:=TLabel.Create(WizardForm);
with FreeSpaceLabel do begin
Transparent:=True;
end;
Kashtan007
09-07-2014, 23:53
Shift85, прости что достаю, но я никак не пойму куда эту запихнуть? Уже везде в коде пробовал вставлять... одни ошибки.
Kashtan007, Код скрипта покажи.
Johny777
10-07-2014, 13:21
Shkutu,
Нужно проверять, что директория, задаваемая пользователем является действительно валидной директорией (с буквой диска вначале или в форме UNC)»
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773584%28v=vs.85%29.aspx
Johny777, спасибо, похоже то, что надо. А может еще подскажете, как этим правильно пользоваться? Там просто параметр - это вроде указатель. Пробовала объявлять функцию как
function PathFileExists(Path: pansichar): boolean;
external 'PathFileExists@Shlwapi.dll stdcall delayload';
В этом случае ругается на "could not call proc". Обычных указателей типа pointer в инно нет, насколько я знаю, и просто запихать в параметр строку (хотя по факту она и указатель), тоже нельзя.
Johny777
10-07-2014, 15:08
Shkutu, И правильно ругается. Т.к. в библиотеке нет имени функции под названием "PathFileExists".
дело в том что все WINAPI функции и процедуры где во входных аргументах есть "строка" функция задаётся двумя типами:
имя_функцииW - сокр. Wide - стока символов в который каждый символ лежит в Word-е
имя_функцииA - сокр. Ansi - стока символов в который каждый символ лежит в Byte-е
PWideChar, PAnsiChar - типизированный указатель на первый байт строки.
сама по себе типизация - это приблуда языков для упрощения адресной арифметики,
скажем адрес первого байта 1000000 и он лежит в переменной типа типизированного указателя P: PWideChar
получаешь значение по адресу в P так: P^
чтоб получить след. символ нужно прибавить к P единицу ( P + 1 ). При этом числовое значение указателя становится 1000002 тк SizeOf(WideChar) = 2 байта,
Те компилятор знает благодаря типизации на сколько байт нужно сместиться
можно и так NativeUInt(P) + SizeOf(WideChar)
в PAnsiChar смещение (или шаг) на 1 байт соответственно
при это String это самый обычный указатель
попробуй если интересно в нормальном языке сделать так:
program Project3;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
s: AnsiString = 'abc';
begin
WriteLn( NativeUInt( s ), #32#32, NativeUInt( PAnsiChar(s) ), #32#32, NativeUInt( @s[1] ) );
WriteLn( PAnsiChar( s )^, #32#32, s[1] );
ReadLn;
end.
и ты увидишь что и адреса и символы равны :)
если мне память не изменяет, то в Ansi версии инно все String по дефолту AnsiString , а в юникодной версии WideString
и так как мы выяснили что (Wide/Ansi)String = P(Wide/Ansi)Char = Pointer, то канает следующее:
#ifdef UNICODE
function PathFileExists( pszPath: String ): BOOL;
external 'PathFileExistsW@Shlwapi.dll stdcall delayload';
#else
function PathFileExists( pszPath: String ): BOOL;
external 'PathFileExistsA@Shlwapi.dll stdcall delayload';
#endif
procedure InitializeWizard();
begin
if PathFileExists( 'C:\Program Files (x86)\OpenAL' ) then
MsgBox('Ok', mbInformation, MB_OK)
else
MsgBox('Error', mbInformation, MB_OK);
end;
1- В папку packeddata закиньте файлы какие необходимо сжать.
2- Запустите lzma.bat.
3- В папке data получите готовый архив. »
Еще раз спасибо, получилось :) Теперь при распаковке не зависает))
А можно поинтересоваться, как это вы так сделали? Как оно работает?
Irenis, Документация на FreeArc 0.40 (http://freearc.org/ru/FreeArc040-rus.htm)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC