Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Можно ли как-то сделать чтоб они плюсовались? »
Честно говоря, ни разу не задавался таким вопросом, пробежавшись по справке, нашёл 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
как сделать шрифт инталлятора белым цветом?
как сделать шрифт инталлятора белым цветом? »
В шапке темы есть скрипт Ultimate Test, там это реализовано.
P.S.
Я всегда конечно удивлялся, но чтоб из 128 скачиваний ни одного спасибо...
как сделать шрифт инталлятора белым цветом?
Я же писал)))
alex2010,
Font.Color:=ClWhite;
Здравствуйте, обновил 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;??
Здравствуйте, обновил 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 »
Все, не надо, спасибо всем за помощь!!!
Подскажите где можно подглядеть как писать скрипт на распаковку архивов *.7z через секцию [RUN]. И какие для этова нужны дополнительные файлы и dll?
но почему-то у меня если выставить его девятизначным(чтоб было 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, там есть пример.
Срочно! :)
Никогда не заморачивался над внешним видом, но такое очень хочется повторить!
http://b.imagehost.org/0718/Snap31.jpg
Подскажите как, я думаю это не сложный код!? Битмэп во всю ширину.
я думаю это не сложный код!? »
Строк так на пятьсот, с учётом, что вы не все страницы будите использовать.
В шапке темы есть ссылка на скрипт Картинка на страницах инсталлятора.
О! Спасибо, я не думал что так много! Но раз есть готовое, то не важно сколько строк. :)
---
Немного поясню, может не совсем правильно понят был. Картинку буквально не надо растягивать,
достаточно только показать готовую широкую картинку по площади окна. И только на StartPage
и на FinishPage. Нижнее поле кнопок не надо покрывать картинкой, это хотелось бы поправить.
Может сам справлюсь, я пока удалил другие страницы, но диалоги тоже какие-то остались
со "скином", пока думаю...
Типичный мой инсталлер -
Welcome! | сразу > Redy to Install | Installing... | Complete! - больше ничего!
Картинка в области кнопок ещё и плохо тем что стили WinXP там обычно плохо прорисовываются.
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? и опять где сами архивы?
Есть ещё один вопрос для меня актуальный.
Я давно ещё хотел зделать запуск программы "taskkill.exe", но только самодельной утилиты.
Проблема в том, что даже если зделать запуск из секции [code] перед началом установки,
то остаётся не решённым то что надо заранее иметь утилиту в папке {tmp}
А как её туда скопировать из инсталятора перед установкой? Получается замкнутый круг.
Но я придумал тогда зделать один инсталятор внутри другого. Но может быть есть более
красивый способ?
Системный taskkill.exe не годится, на него надежды мало, так как он может просто не работать
если в системе не установленна WBEM - такое просто запорет установку за зря.
Очень плохо что этап распаковки происходит в один раз без контроля из секции [code]
А может есть способ всётаки?
Мои изобретения -
Кампилируем первый файл: (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"
Может кому нибудь пригодится :)
Неожиданно с кодом загрузки большой картинки увидел следущее:
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.