PDA

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


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

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] сделать. Кто знает подскажите, пожалуйста.

Shkutu
09-07-2014, 02:33
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);

Irenis
09-07-2014, 12:33
Добрый день! Подскажите, в чем может быть проблема. Делала установщик одной игры. Все было отлично. Потом вышло обновление игры, я обновила её. Передела архив .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, а в скрипте поменяла расширение файла?

Shkutu
09-07-2014, 18:51
Доброго времени суток!
А нет ли в инно возможности сравнивать строки по маскам или использовать регулярные выражения? Нужно проверять, что директория, задаваемая пользователем является действительно валидной директорией (с буквой диска вначале или в форме UNC). Т е нужна реализация чего-то типа стандартной проверки инно при задании директории установки. Может кто помочь советом/кодом?:)

Irenis
09-07-2014, 21:53
Irenis, а в скрипте поменяла расширение файла? »
Нет, расширение не меняла, так как это не требовалось. Там и так было bin. Тем более, если бы что то было не так с расширением в скрипте, то вообще ничего не распаковывалось, а выдало ошибку. А тут вроде все нормально, распаковывается, но на 85.9 % останавливается и дальше никак, сколько не жди.

Shift85
09-07-2014, 21:56
ничего не распаковывалось, а выдало ошибку »
Irenis, Каким методом упакован архив и через что?

как в установщике сделать прозрачный фон под надписями, »
Kashtan007,

Transparent:=True;

Irenis
09-07-2014, 22:17
Каким методом упакован архив и через что? »
Ну я пока только одним методом все делала, FreeArc-ом. Просто добавляю файлы игры в архив, переименовываю в bin, сжатие ставлю либо нормальное, либо высокое, и все, больше ничего не трогаю, нажимаю ОК. Других методов, честно говоря не знаю, так как до этого никаких проблем не возникало.

Shift85
09-07-2014, 22:27
Irenis, Попробуйте сжать и распаковать вот небольшой примерчик.

http://rghost.ru/56811699

1- В папку packeddata закиньте файлы какие необходимо сжать.
2- Запустите lzma.bat.
3- В папке data получите готовый архив.

Irenis
09-07-2014, 22:37
Shift85, спасибо, попробую))

Kashtan007
09-07-2014, 22:44
Shift85, спасибо большое), а куда эту строку засунуть?

Shift85
09-07-2014, 23:17
куда эту строку засунуть? »
Kashtan007, Пример.

FreeSpaceLabel:=TLabel.Create(WizardForm);
with FreeSpaceLabel do begin

Transparent:=True;

end;

Kashtan007
09-07-2014, 23:53
Shift85, прости что достаю, но я никак не пойму куда эту запихнуть? Уже везде в коде пробовал вставлять... одни ошибки.

Shift85
09-07-2014, 23:58
Kashtan007, Код скрипта покажи.

Johny777
10-07-2014, 13:21
Shkutu,
Нужно проверять, что директория, задаваемая пользователем является действительно валидной директорией (с буквой диска вначале или в форме UNC)»
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773584%28v=vs.85%29.aspx

Shkutu
10-07-2014, 14:24
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;

Irenis
10-07-2014, 15:36
1- В папку packeddata закиньте файлы какие необходимо сжать.
2- Запустите lzma.bat.
3- В папке data получите готовый архив. »
Еще раз спасибо, получилось :) Теперь при распаковке не зависает))
А можно поинтересоваться, как это вы так сделали? Как оно работает?

Nordek
10-07-2014, 16:37
Irenis, Документация на FreeArc 0.40 (http://freearc.org/ru/FreeArc040-rus.htm)




© OSzone.net 2001-2012