Войти

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


Страниц : 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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

LinkOFF
15-05-2011, 19:26
Какой параметр нужно поставить в секции [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

и таки да, запускает отмеченное галкой после нажатия кнопки "Завершить"

ivsatel
16-05-2011, 19:27
Есть *.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 - файлами.

ivsatel
16-05-2011, 22:59
Основываясь на этом примере:


[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);

ArtemYa
17-05-2011, 11:50
Подскажите пожалуйста. Задача такая, при установке пользователю нужно сделать выбор, выбрать один из 5-ти dll файлов, который в дальнейшем будет установлен и зарегестрирован на компьютере. Подскажите, как организовать такой выбор?

Imitri7
17-05-2011, 19:59
давно не был...
начал писать скрипт и передо мной встала задача сделать чекбокс с таким же положением как при флаге 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;

ivsatel
17-05-2011, 22:20
Посмотрите пожалуйста, в чем ошибка?

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;

lmiol
18-05-2011, 02:02
попробую описать подробней с наглядным нарисованным примером мое предыдущее сообщение (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) -великая вещ, ну почему так лениво потратить на него пять минут?

ArtemYa
18-05-2011, 15:43
Отвечаю:
Смотрите [Components] section

ArtemYa
18-05-2011, 15:46
Подскажите пожалуйста, возможно ли в окне "Выбор компанентов", настраиваемом [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. Как прописать эти цвета (...=$...)?

ArtemYa
18-05-2011, 16:04
Получилось!
Лександер, большое спасибо!




© OSzone.net 2001-2012