PDA

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


Страниц : 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 126 127 128 129 130 131 132 133

Serega
12-03-2010, 19:11
Можно ли как-то сделать чтоб они плюсовались? »
Честно говоря, ни разу не задавался таким вопросом, пробежавшись по справке, нашёл UninstallDisplaySize, но она работает только для Win7 и выше, а на XP апплет "Установка и удаление программ", ищет место расположение папки установленной программы в реестре, а затем подсчитывает её размер (определил экспериментальным путём), отсюда вывод - извлекайте архивы в папку своего приложения.

чтобы в TEdit можно было вводить только латинские символы »

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
procedure EditKeyPress(Sender: TObject; var Key: Char);
begin
if ((Key < #65) or (Key > #90)) and ((Key < #97) or (Key > #122)) then Key:= #0;
end;

procedure InitializeWizard();
begin
with TNewEdit.Create(WizardForm) do
begin
Parent:= WizardForm;
SetBounds(ScaleX(16), ScaleY(327), ScaleX(209), ScaleY(21));
OnKeyPress:= @EditKeyPress;
end;
end;

alex2010
12-03-2010, 19:18
как сделать шрифт инталлятора белым цветом?

Serega
12-03-2010, 19:31
как сделать шрифт инталлятора белым цветом? »
В шапке темы есть скрипт Ultimate Test, там это реализовано.

P.S.
Я всегда конечно удивлялся, но чтоб из 128 скачиваний ни одного спасибо...

patrion
12-03-2010, 19:40
как сделать шрифт инталлятора белым цветом?
Я же писал)))

vint56
12-03-2010, 20:38
alex2010,
Font.Color:=ClWhite;

Serega
12-03-2010, 21:54
Здравствуйте, обновил Converter, ссылка прежняя (http://forum.oszone.net/post-1216149-86.html).

alex2010
12-03-2010, 22:42
Serega, я так понял, что этот скрипт для проверки характеристики компа?, а мне надо как здесь:
http://10pix.ru/img1/3646/979341.th.png (http://10pix.ru/view/3646/979341/)
patrion, vint56, куда имеено вставлять это Font.Color:=ClWhite;??

YURSHAT
12-03-2010, 22:50
Здравствуйте, обновил Converter, ссылка прежняя. »

Обновил шапку на ru-board

patrion, vint56, куда имеено вставлять это »

в секцию [Icons] :lol:

а если серъезно, то так

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[code_]
procedure InitializeWizard();
begin
WizardForm.Font.Color:=ClBlue;
WizardForm.WelcomeLabel1.Font.Color:=ClBlue;
WizardForm.FinishedHeadingLabel.Font.Color:=ClBlue;
WizardForm.PageNameLabel.Font.Color:=ClBlue;
end;

МИШАНЧИК
13-03-2010, 01:29
Serega, спасибо!
пробежавшись по справке, нашёл UninstallDisplaySize »
Я его уже пробовал, но почему-то у меня если выставить его девятизначным(чтоб было 1 Гб и больше) скрипт при компиляции выдаёт ошибку в этой строке, если же число восьмизначное, или ещё меньше - то компилируется нормально.
отсюда вывод - извлекайте архивы в папку своего приложения »
Так я их туда и извлекаю, а размер установленной программы всё-равно равен размеру инсталятора без архивов.

Jerichoman
13-03-2010, 10:46
Кто-нибудь хелп!!!!
помогите http://upwap.ru/779001
появляется при попытке восстановить файлы обработанные precomp »
Все, не надо, спасибо всем за помощь!!!

Deen
13-03-2010, 17:53
Подскажите где можно подглядеть как писать скрипт на распаковку архивов *.7z через секцию [RUN]. И какие для этова нужны дополнительные файлы и dll?

Serega
13-03-2010, 19:35
но почему-то у меня если выставить его девятизначным(чтоб было 1 Гб и больше) скрипт при компиляции выдаёт ошибку в этой строке »
Использую расширенную версию от Restools+дополнения, попробовал с UninstallDisplaySize=1073741824, что составляет 1Гб, компиляция прошла нормально, т.е. никаких ошибок, а вот при UninstallDisplaySize=2147483648, что составляет 2Гб, выскачила ошибка, хотя в справке написано:
Valid values:
1 through 4294967295
т.е. максимальный размер 4Гб, но на практике получается только 1Гб, возможно это глюк, который думаю позже исправят, но в любом случае она действует только на Win7 и выше.
а размер установленной программы всё-равно равен размеру инсталятора без архивов »
Я объясню, как проверял, т.е. произвожу установку полностью пустого скрипта, захожу в апплет "Установка и удаление программ", вижу размер 0,87МБ, закрываю апплет, копирую в эту же папку программы архив размером 43,7МБ, запускаю снова апплет "Установка и удаление программ" и вижу... упс... интересно вчера размер менялся, а сегодня остаётся прежний, видимо апплет читает размер по другому, чем я думал...

где можно подглядеть как писать скрипт на распаковку архивов *.7z »
Скачайте из шапки темы Inno Setup Scripting 5.1, там есть пример.

semiono
13-03-2010, 21:08
Срочно! :)
Никогда не заморачивался над внешним видом, но такое очень хочется повторить!

http://b.imagehost.org/0718/Snap31.jpg
Подскажите как, я думаю это не сложный код!? Битмэп во всю ширину.

Serega
13-03-2010, 22:20
я думаю это не сложный код!? »
Строк так на пятьсот, с учётом, что вы не все страницы будите использовать.
В шапке темы есть ссылка на скрипт Картинка на страницах инсталлятора.

semiono
13-03-2010, 22:56
О! Спасибо, я не думал что так много! Но раз есть готовое, то не важно сколько строк. :)
---
Немного поясню, может не совсем правильно понят был. Картинку буквально не надо растягивать,
достаточно только показать готовую широкую картинку по площади окна. И только на StartPage
и на FinishPage. Нижнее поле кнопок не надо покрывать картинкой, это хотелось бы поправить.
Может сам справлюсь, я пока удалил другие страницы, но диалоги тоже какие-то остались
со "скином", пока думаю...

Типичный мой инсталлер -
Welcome! | сразу > Redy to Install | Installing... | Complete! - больше ничего!

Картинка в области кнопок ещё и плохо тем что стили WinXP там обычно плохо прорисовываются.

Deen
13-03-2010, 23:18
Serega, а поточнее можно, я понимаю что это уже наверное обсуждали и где на форуме это есть. Я осилил только 28 стр. и научился делать простейшие репаки без внешних упаковщиков, но иногда выходит размер не тот что надо и я пошол дальше учиться.

Посуветуйте чем проще сжимать, я сам решил что 7зип проще чем фриарк, я извлекал много разных скриптов, но в основном попадаются с ФА, а не с 7зип.

Вот например из скрипта игры AvP от механиков:
[Files]
Source: {tmp}\button.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\logo.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\papka.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\ac.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\sr.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\msvcr80.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\packjpg_dll.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\pp.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\zlib1.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
и где тут прописаны архивы, где сама игра, одни темп файлы.

Или вот от игры Dirt 2:
[Files]
Source: {tmp}\BitmapHelper.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\InnoCallback.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Background.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Buttons.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Flags.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\FolderImage.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\arc.exe; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy

arc.exe это из корня папки ФА, а что за dll? и опять где сами архивы?

semiono
13-03-2010, 23:37
Есть ещё один вопрос для меня актуальный.
Я давно ещё хотел зделать запуск программы "taskkill.exe", но только самодельной утилиты.
Проблема в том, что даже если зделать запуск из секции [code] перед началом установки,
то остаётся не решённым то что надо заранее иметь утилиту в папке {tmp}
А как её туда скопировать из инсталятора перед установкой? Получается замкнутый круг.

Но я придумал тогда зделать один инсталятор внутри другого. Но может быть есть более
красивый способ?

Системный taskkill.exe не годится, на него надежды мало, так как он может просто не работать
если в системе не установленна WBEM - такое просто запорет установку за зря.

Очень плохо что этап распаковки происходит в один раз без контроля из секции [code]
А может есть способ всётаки?

semiono
14-03-2010, 04:54
Мои изобретения -

Кампилируем первый файл: (stubz.exe)

[Setup]
AppName=stub
AppVerName=stub 1.1.1.1
AllowUNCPath=yes
DefaultDirName={win}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=.
OutputBaseFilename=stubz
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=2001-2005 GmbH
VersionInfoDescription=stub
VersionInfoTextVersion=1.1.1.1
VersionInfoVersion=1.1.1.1
Uninstallable=no
UsePreviousAppDir=no

[Kode] // < защита от html тэга
procedure InitializeWizard();
begin
try
DelTree(ExpandConstant('{sd}\Test\*'), False, True, True);
except
Beep; Exit;
end;
end;

[Files]
Source: "pkill.exe"; DestDir: "{sd}\Test"; Flags: touch; Permissions: admins-full

Кампилируем второй файл: (stub.exe)

[Setup]
AppName=stub
AppVerName=stub 1.1.1.1
AllowUNCPath=yes
DefaultDirName={win}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=.
OutputBaseFilename=stub
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=2001-2005 GmbH
VersionInfoDescription=stub
VersionInfoTextVersion=1.1.1.1
VersionInfoVersion=1.1.1.1
Uninstallable=no
UsePreviousAppDir=no

[Kode]
procedure InitializeWizard();

var
ErrorCode: Integer;
begin
FileCopy(ExpandConstant('{sys}\calc.exe'), ExpandConstant('{sd}\Test\calc.exe'), true);
ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
end;

[Run]
Filename: "{tmp}\pkill.exe"; Parameters: "calc.exe"; Flags: runhidden
Filename: "{tmp}\stubz.exe"; Parameters: "/verysilent"; Flags: waituntilterminated

[Files]
Source: "pkill.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall touch; Permissions: admins-full
Source: "stubz.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall touch; Permissions: admins-full

На словах здесь копируется калькулятор в директорию {app} и запускается три раза,
чтобы не было возможно удалить директорию. После чего запускается pkill.exe
который закрывает калькуляторы и затем чистится целевая директория, и для теста
туда копируется pkill.exe

:)

solvador
14-03-2010, 22:00
Мне недавно понадобилось найти в файле нужный параметр и дописать к нему своё значение. Функция замены строки в файле в "чистом" виде не подошла. Пришлось слегка доработать его. Собственно сам скрипт:
Procedure StrInsert ();
var
S: TArrayOfString;
F: String;
i:integer;
begin
F := ExpandConstant('{app}')+'\file.txt';
if not FileExists(F) then Exit;
LoadStringsFromFile(F, S);
for i:=0 to GetArrayLength(S)-1 do begin
if Pos('param',S[i])>0 then
begin
if Pos('=', S[i])>0 then Insert('insParam ', S[i], Pos('=', S[i])+2) else Exit;
end;
end;
SaveStringsToFile(F, S, False);
end;
В этом примере скрипт ищет в файле file.txt строку содержащую param, потом в полученной строке ищет знак равенства = Если такой знак имеется, то через один символ дописывает insParam.
Результат работы: было "bla bla param = bla bla" стало "bla bla param = insParam bla bla"
Может кому нибудь пригодится :)

semiono
14-03-2010, 22:51
Неожиданно с кодом загрузки большой картинки увидел следущее:
begin
ExtractTemporaryFile('img.bmp');

Значит все мои шаманства с двумя инсталлерами бред! :)
Я не знал что из кода можно распаковать!


Правильно ли так будет или можно оптимизировать?
procedure InitializeWizard();
begin
ExtractTemporaryFile('pkill.exe');
ShellExec('', ExpandConstant('{tmp}\pkill.exe'),'calc.exe', '',
SW_SHOW, ewNoWait, ErrorCode);
end;

И чем отличается Exec() от ShellExec(), первый я так и не смог использовать
из-за безчисленных BEGIN IF THEN в примере.




© OSzone.net 2001-2012