Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
Какой параметр нужно поставить в секции [run] чтоб дождаться конца установки
insombia
15-05-2011, 22:23
LinkOFF опиши подробнее что тебе нужно
murlakatamenka
16-05-2011, 02:44
Какой параметр нужно поставить в секции [run] чтоб дождаться конца установки
LinkOFF, флаг waituntilterminated ждёт завершения предыдущей операции до начала следующей
возможно нужен postinstall, т.к. при нём операции выполняются после завершения установки
R.i.m.s.k.y.
16-05-2011, 08:48
postinstall, т.к. при нём операции выполняются после завершения установки »
не совсем, этот флаг на последней странице установки делает галку, к примеру, "Показать README"
[Run]
Filename: "{app}\README.TXT"; Description: "Показать README"; Flags: postinstall shellexec skipifsilent
и таки да, запускает отмеченное галкой после нажатия кнопки "Завершить"
Есть *.xml файл с настройками программы. Часть из этих настроек указывает на местоположение ресурсов нужных для этой программы.
Возможно ли автозаполнение этих строк с подменой стандартного указания C:\Program Files на {app}
Gnom_aka_Lexander
16-05-2011, 21:03
ivsatel, Можно, есть готовый модуль (http://www.krinkels.ru/load/skripty_inno_setup/xml_v_1_0/3-1-0-23) для работы с xml - файлами.
Основываясь на этом примере:
[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program
[Files]
Source: report.xml; Flags: dontcopy
(Code)
Function InitializeSetup: Boolean;
var
xml, currNode, rootNode, subNode, xmlParser, Fragment: Variant;
begin
ExtractTemporaryFile('report.xml');
xml:= CreateOleObject('MSXML2.DOMDocument');
xml.async:= false;
xml.preserveWhiteSpace:= true;
xml.load(ExpandConstant('{tmp}\report.xml'));
currNode:= xml.selectSingleNode('//SMBIOS/section[(@name=''Mainboard'')]')
MsgBox(currNode.text, mbInformation, MB_OK);
// ----------------------------------------------
xmlParser:= CreateOleObject('MSXML2.DOMDocument');
//'Создание объявления XML
xmlParser.appendChild(xmlParser.createProcessingInstruction('xml', 'version="1.0" encoding="windows-1251"'));
//'Создание комментария
xmlParser.appendChild(xmlParser.createComment('Текст комментария'));
//'Создание корневого элемента
rootNode:= xmlParser.appendChild(xmlParser.createElement('ROOT'));
//'Создание первого вложенного элемента
subNode:= rootNode.appendChild(xmlParser.createElement('SUB'));
subNode.text:= 'Текст первого вложенного элемента';
//'Создание второго вложенного элемента
subNode:= rootNode.appendChild(xmlParser.createElement('SUB'));
//'Создание раздела CDATA
subNode.appendChild(xmlParser.createCDATASection('<<< >>> &&& Произвольные текстовые данные'));
//'Создание ссылки на примитив
subNode.appendChild(xmlParser.createEntityReference('amp'));
//'Создание текстового узла
subNode.appendChild(xmlParser.createTextNode('Текст второго вложенного элемента'));
//'Создание третьего вложенного элемента с использованием пространства имён
subNode:= rootNode.appendChild(xmlParser.createNode(1, 'html:H1', 'http://www.w3c.org/TR/REC-html40/'));
subNode.text:= 'Заголовок HTML';
//'Создание четвёртого и пятого вложенных элементов с использованием фрагмента
Fragment:= xmlParser.createDocumentFragment;
Fragment.appendChild(xmlParser.createElement('SUB'));
Fragment.appendChild(xmlParser.createElement('SUB'));
rootNode.appendChild(Fragment);
xmlParser.save('C:\Test.xml')
End;
Попытался изменить код в своих нуждах, но при установке выходит ошибка "Недопустимое число параметров" в чем ошибка?
Function InitializeSetup: Boolean;
var
xml, currNode, rootNode, subNode, xmlParser, Fragment: Variant;
begin
ExtractTemporaryFile('preferences.xml');
xml:= CreateOleObject('MSXML2.DOMDocument');
xml.async:= false;
xml.preserveWhiteSpace:= true;
xml.load(ExpandConstant('{tmp}\preferences.xml'));
// ----------------------------------------------
xmlParser:= CreateOleObject('MSXML2.DOMDocument');
//'Создание объявления XML
xmlParser.appendChild(xmlParser.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'));
//'Создание корневого элемента MyProgSettings
rootNode:= xmlParser.appendChild(xmlParser.createElement('MyProgSettings', 'version="1"'));
//'Создание первого вложенного элемента MyProgHotkeys
subNode:= rootNode.appendChild(xmlParser.createElement('PuntoHotkeys'));
subNode.text:= '19,275,1043,1169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4179,0,0,0,0';
//'Создание вложенного элемента LayoutSwitchKey
subNode:= rootNode.appendChild(xmlParser.createElement('LayoutSwitchKey'));
subNode.text:= '0';
//'Создание вложенного элемента SeparateLangCombination
subNode:= rootNode.appendChild(xmlParser.createElement('SeparateLangCombination'));
subNode.text:= '0';
//'Создание вложенного элемента TransparentFormsFiller
subNode:= rootNode.appendChild(xmlParser.createElement('TransparentFormsFiller'));
subNode.text:= '0';
//'Создание вложенного элемента CheckForUpdate
subNode:= rootNode.appendChild(xmlParser.createElement('CheckForUpdate'));
subNode.text:= 'No';
//'Создание вложенного элемента RunAtStartup
subNode:= rootNode.appendChild(xmlParser.createElement('RunAtStartup'));
subNode.text:= 'Yes';
//'Создание вложенного элемента DontConvertCapitals
subNode:= rootNode.appendChild(xmlParser.createElement('DontConvertCapitals'));
subNode.text:= 'No';
//'Создание вложенного элемента DontShowTrayIcon
subNode:= rootNode.appendChild(xmlParser.createElement('DontShowTrayIcon'));
subNode.text:= 'No';
//'Создание вложенного элемента ChangeIconClrOnMisprint
subNode:= rootNode.appendChild(xmlParser.createElement('ChangeIconClrOnMisprint'));
subNode.text:= 'Yes';
//'Создание вложенного элемента ShowCurLayoutInWndIcon
subNode:= rootNode.appendChild(xmlParser.createElement('ShowCurLayoutInWndIcon'));
subNode.text:= 'No';
//'Создание вложенного элемента ShowPopupOnException
subNode:= rootNode.appendChild(xmlParser.createElement('ShowPopupOnException'));
subNode.text:= 'Yes';
//'Создание вложенного элемента ExceptionCount
subNode:= rootNode.appendChild(xmlParser.createElement('ExceptionCount'));
subNode.text:= '2';
//'Создание вложенного элемента FixTwoUpperLetters
subNode:= rootNode.appendChild(xmlParser.createElement('FixTwoUpperLetters'));
subNode.text:= 'Yes';
//'Создание вложенного элемента FixInvertedCase
subNode:= rootNode.appendChild(xmlParser.createElement('FixInvertedCase'));
subNode.text:= 'Yes';
//'Создание вложенного элемента ShowLayoutFlags
subNode:= rootNode.appendChild(xmlParser.createElement('ShowLayoutFlags'));
subNode.text:= 'Yes';
//'Создание вложенного элемента OneKeySwitchLayoutEnabled
subNode:= rootNode.appendChild(xmlParser.createElement('OneKeySwitchLayoutEnabled'));
subNode.text:= 'No';
//'Создание вложенного элемента BinarySwitchLayout
subNode:= rootNode.appendChild(xmlParser.createElement('BinarySwitchLayout'));
subNode.text:= 'No';
//'Создание вложенного элемента DisablePreHandle
subNode:= rootNode.appendChild(xmlParser.createElement('DisablePreHandle'));
subNode.text:= 'No';
//'Создание вложенного элемента AllSoundsEnabled
subNode:= rootNode.appendChild(xmlParser.createElement('AllSoundsEnabled'));
subNode.text:= 'Yes';
//'Создание вложенного элемента FirstLaunch
subNode:= rootNode.appendChild(xmlParser.createElement('FirstLaunch'));
subNode.text:= 'No';
//'Создание вложенного элемента SeparateLangKeysEnabled
subNode:= rootNode.appendChild(xmlParser.createElement('SeparateLangKeysEnabled'));
subNode.text:= 'No';
//'Создание вложенного элемента ShowQuickWordsListInLeftBtnMenu
subNode:= rootNode.appendChild(xmlParser.createElement('ShowQuickWordsListInLeftBtnMenu'));
subNode.text:= 'Yes';
//'Создание вложенного элемента DontReactOnOtherLangs
subNode:= rootNode.appendChild(xmlParser.createElement('DontReactOnOtherLangs'));
subNode.text:= 'No';
//'Создание вложенного элемента SingleLayout
subNode:= rootNode.appendChild(xmlParser.createElement('SingleLayout'));
subNode.text:= 'No';
//'Создание вложенного элемента ShowTooltips
subNode:= rootNode.appendChild(xmlParser.createElement('ShowTooltips'));
subNode.text:= 'No';
//'Создание вложенного элемента EnableDiary
subNode:= rootNode.appendChild(xmlParser.createElement('EnableDiary'));
subNode.text:= 'No';
//'Создание вложенного элемента DiarySkipSepWords
subNode:= rootNode.appendChild(xmlParser.createElement('DiarySkipSepWords'));
subNode.text:= 'Yes';
//'Создание вложенного элемента ScrollAsCaps
subNode:= rootNode.appendChild(xmlParser.createElement('ScrollAsCaps'));
subNode.text:= 'No';
//'Создание вложенного элемента HidePopIndicAfterLayoutChange
subNode:= rootNode.appendChild(xmlParser.createElement('HidePopIndicAfterLayoutChange'));
subNode.text:= 'No';
//'Создание вложенного элемента PSWorks
subNode:= rootNode.appendChild(xmlParser.createElement('PSWorks'));
subNode.text:= 'Yes';
//'Создание вложенного элемента DisableHotKeysWhenTurnedOff
subNode:= rootNode.appendChild(xmlParser.createElement('DisableHotKeysWhenTurnedOff'));
subNode.text:= 'No';
//'Создание вложенного элемента FixPopupIndicator
subNode:= rootNode.appendChild(xmlParser.createElement('FixPopupIndicator'));
subNode.text:= 'No';
//'Создание вложенного элемента ShowUsefulTips
subNode:= rootNode.appendChild(xmlParser.createElement('ShowUsefulTips'));
subNode.text:= 'No';
//'Создание вложенного элемента EnableIntelliMenus
subNode:= rootNode.appendChild(xmlParser.createElement('EnableIntelliMenus'));
subNode.text:= 'No';
//'Создание вложенного элемента AutoReplaceAlways
subNode:= rootNode.appendChild(xmlParser.createElement35('AutoReplaceAlways'));
subNode.text:= 'Yes';
//'Создание вложенного элемента TurnOffDiaryInProgExceptions
subNode:= rootNode.appendChild(xmlParser.createElement('TurnOffDiaryInProgExceptions'));
subNode.text:= 'No';
//'Создание вложенного элемента ShowFormsFiller
subNode:= rootNode.appendChild(xmlParser.createElement('ShowFormsFiller'));
subNode.text:= 'No';
//'Создание вложенного элемента ReplaceOnEnterAndTab
subNode:= rootNode.appendChild(xmlParser.createElement('ReplaceOnEnterAndTab'));
subNode.text:= 'Yes';
//'Создание вложенного элемента ReplaceOnSpace
subNode:= rootNode.appendChild(xmlParser.createElement('ReplaceOnSpace'));
subNode.text:= 'No';
//'Создание вложенного элемента DontShowTranslitWin
subNode:= rootNode.appendChild(xmlParser.createElement('DontShowTranslitWin'));
subNode.text:= 'No';
//'Создание вложенного элемента FullUnhookWhenDisabled
subNode:= rootNode.appendChild(xmlParser.createElement('FullUnhookWhenDisabled'));
subNode.text:= 'No';
//'Создание вложенного элемента EnableClipboardHistory
subNode:= rootNode.appendChild(xmlParser.createElement('EnableClipboardHistory'));
subNode.text:= 'No';
//'Создание вложенного элемента AutoSaveClipboardToDiary
subNode:= rootNode.appendChild(xmlParser.createElement('AutoSaveClipboardToDiary'));
subNode.text:= 'No';
//'Создание вложенного элемента EnableMouseEmulation
subNode:= rootNode.appendChild(xmlParser.createElement('EnableMouseEmulation'));
subNode.text:= 'No';
//'Создание вложенного элемента DisableCapsLock
subNode:= rootNode.appendChild(xmlParser.createElement('DisableCapsLock'));
subNode.text:= 'No';
//'Создание вложенного элемента PopupIndicatorPos
subNode:= rootNode.appendChild(xmlParser.createElement('PopupIndicatorPos'));
subNode.text:= 'CPoint(300, 300)';
//'Создание вложенного элемента FormsFillerRect
subNode:= rootNode.appendChild(xmlParser.createElement('FormsFillerRect'));
subNode.text:= 'CRect(100, 100, 350, 500)';
//'Создание вложенного элемента RestrictKeysEnabled
subNode:= rootNode.appendChild(xmlParser.createElement('RestrictKeysEnabled'));
subNode.text:= 'No,No,No,No,No,No,No';
//'Создание вложенного элемента MinDiaryRecordWords
subNode:= rootNode.appendChild(xmlParser.createElement('MinDiaryRecordWords'));
subNode.text:= '1';
//'Создание вложенного элемента CurrentAdviceNum
subNode:= rootNode.appendChild(xmlParser.createElement('CurrentAdviceNum'));
subNode.text:= '0';
//'Создание вложенного элемента DontSwitchOnOtherLangs
subNode:= rootNode.appendChild(xmlParser.createElement('DontSwitchOnOtherLangs'));
subNode.text:= 'No';
//'Создание вложенного элемента Sounds
subNode:= rootNode.appendChild(xmlParser.createElement('Sounds'));
subNode.text:= '{app}\MyProg\Sounds\typerus.wav,{app}\MyProg\Sounds\typeeng.wav,{app}\MyProg\Sounds\switch.wav,{app }\MyProg\Sounds\misprint.wav,{app}\MyProg\Sounds\ru.wav,{app}\MyProg\Sounds\en.wav,{app}\MyProg\Soun ds\reverse.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\swi tch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav ,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\replace.wav';
//'Создание вложенного элемента SoundsStates
subNode:= rootNode.appendChild(xmlParser.createElement('SoundsStates'));
subNode.text:= '98304003,131072003,163840002,45875202,65536003,131072003,131072002,131072002,131072002,131072002,13 1072002,98304002,111411203,124518403,32768003,26214402';
//'Создание вложенного элемента AskF12Support
subNode:= rootNode.appendChild(xmlParser.createElement('AskF12Support'));
subNode.text:= 'No';
xmlParser.save('{userappdata}\preferences.xml')
End;
El Sanchez
17-05-2011, 08:42
ivsatel, так вам же нужно заменить данные, а не новые записать. Пример функции, заменяющей данные между всеми найденными тегами в файле:
[Code]
function ReplaceDataXML(FileName, TagName, Data: String): Boolean;
var
oXMLDoc, objNodeList: Variant;
i: integer;
MD5: String;
begin
if not FileExists(FileName) then Exit;
MD5 := GetMD5OfFile(FileName);
try
oXMLDoc := CreateOleObject('Microsoft.XMLDOM');
except
ShowExceptionMessage;
Exit;
end;
oXMLDoc.async := False;
oXMLDoc.load(FileName);
objNodeList := oXMLDoc.getElementsByTagName(TagName);
for i := 0 to objNodeList.length-1 do
objNodeList.item[i].firstChild.data := Data;
oXMLDoc.save(FileName);
Result := (MD5 <> GetMD5OfFile(FileName));
end;
//где-то там вызов
if ReplaceDataXML(ExpandConstant('{src}\preferences.xml'), 'filename', 'blablabla') then
MsgBox('OK', mbInformation, MB_OK)
else
MsgBox('Failure', mbError, MB_OK);
Подскажите пожалуйста. Задача такая, при установке пользователю нужно сделать выбор, выбрать один из 5-ти dll файлов, который в дальнейшем будет установлен и зарегестрирован на компьютере. Подскажите, как организовать такой выбор?
давно не был...
начал писать скрипт и передо мной встала задача сделать чекбокс с таким же положением как при флаге fixed
вот то что проделал сам
MyCheck1 := TCheckBox.Create(WizardForm);
with MyCheck1 do
begin
Top := Label1.Top - ScaleY(1);
Left := ScaleX(4)
Width := ScaleX(15);
Enabled:=false;
end; собственно появился вот такой вопрос, как сделать чтобы галочка была нажата?
Sotonisto
17-05-2011, 20:17
Всем привет! Сегодня мой друг купил игру The Witcher 2. Устанавливал ее при мне.
Я заметил что инсталл русской версии создан innostup'ом :) Есть у кого скрипт такого инсталлятора (ну или похожий)? ;)
http://img23.imageshack.us/img23/3773/37265519.th.gif (http://img23.imageshack.us/img23/3773/37265519.gif) http://img705.imageshack.us/img705/1143/49498106.th.gif (http://img705.imageshack.us/img705/1143/49498106.gif) http://img35.imageshack.us/img35/3400/89109359.th.gif (http://img35.imageshack.us/img35/3400/89109359.gif) http://img714.imageshack.us/img714/6573/13240208.th.gif (http://img714.imageshack.us/img714/6573/13240208.gif) http://img10.imageshack.us/img10/5594/89654410.th.gif (http://img10.imageshack.us/img10/5594/89654410.gif)
Изображения "вытащить" получилось, а вот звуки (при нажатии на кнопки) и все остальное - нет :(
serg aka lain
17-05-2011, 20:45
Imitri7, как сделать чтобы галочка была нажата? »
Checked := True;
Посмотрите пожалуйста, в чем ошибка?
procedure ChangeString;
var
S: TArrayOfString;
F: string;
i: Integer;
begin
F:= ExpandConstant('C:\report.txt');
if not FileExists(F) then Exit; // если файла нет, выходим
LoadStringsFromFile(F, S); // загружаем файл
for i:= 0 to GetArrayLength(S)-1 do
if Pos('c:\Program Files', S[i]) > 0 then
S[i]:= {app}; // записываем параметр
SaveStringsToFile(F, S, False); // сохраняем файл
end;
попробую описать подробней с наглядным нарисованным примером мое предыдущее сообщение (http://forum.oszone.net/post-1676065-1598.html):
Пользователь видит приветствие инсталятора, после он переходит на страницу в которой идет выбор между Free и Premium (рисунок 1), при выборе Premium идет дальше выбор компонентов для выбора Premium (рисунок 2) (и нужно сделать так чтобы для Free и Premium были разные выборы компонентов.
Сделано вот для чего. Человеку выбравшему Free, будет идти установка упрощенных файлов (что будет занимать меньше места на жестком диске) а для Premium Полная установка главных файлов. (что необходимо всем кто заказал Premium)
http://i11.fastpic.ru/thumb/2011/0518/f7/30a56705f8aaf45347c927d2052f32f7.jpeg (http://i11.fastpic.ru/big/2011/0518/f7/30a56705f8aaf45347c927d2052f32f7.jpg) http://i12.fastpic.ru/thumb/2011/0518/29/0515aa01647ebe5a41b7b9e533aa7029.jpeg (http://i12.fastpic.ru/big/2011/0518/29/0515aa01647ebe5a41b7b9e533aa7029.jpg)
Gnom_aka_Lexander
18-05-2011, 15:00
lmiol, Поиск (http://forum.oszone.net/post-1575171-276.html) -великая вещ, ну почему так лениво потратить на него пять минут?
Отвечаю:
Смотрите [Components] section
Подскажите пожалуйста, возможно ли в окне "Выбор компанентов", настраиваемом [Components] section, убрать выпадающий список типа установки (полная, компактная, выборочная)?
Gnom_aka_Lexander
18-05-2011, 15:59
ArtemYa, Можно так:
[Code]
procedure InitializeWizard();
begin
WizardForm.TypesCombo.Hide
end;
Sotonisto
18-05-2011, 16:04
Народ, а есть ли для Inno какая-нибудь таблица цветов? Например я хочу заменить цвет шрифтов на такой http://img84.imageshack.us/img84/8739/97297836.gif или такой http://img151.imageshack.us/img151/8089/60680578.gif. Как прописать эти цвета (...=$...)?
Получилось!
Лександер, большое спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.