Как установить переменные, используя существующий XML-файл в installShield 2010 - PullRequest
0 голосов
/ 10 ноября 2011

Я создаю установщик с Basic MSI Project в InstallShield 2010.

В моей настройке есть настраиваемые диалоговые окна с входными данными, такими как textBoxes.Каждый TextBox ассоциирует переменную со значением по умолчанию.Пакет содержит также файл .xml, который генерируется установщиком и содержит значения, установленные в мастере по определенному пути.Это очень хорошо работает.

Проблема в том, что у меня много текстовых полей и много шагов.Я хочу добавить возможность для пользователя просматривать файл XML в одном из шагов мастера, а затем пропустить все шаги для вставки данных в текстовые поля.

Я предполагаю, что в проекте моего установщика мне нужно установитьзначения по умолчанию для каждой переменной со значением или с путем (я точно знаю, где нужное значение находится в xml) при условии, что пользователь указывает на xml.

Я пока проигнорирую, если просматривалВ xml нет того шаблона, который мне нужен, допустим, я найду пути.

Вопрос в том, как установить переменные в моем проекте в случае просмотра файла XML?

Последнее редактирование:

мой xml выглядит так:

<Settings>
    <SiteNames>
        <Setting property="prop1">value1</Setting>
        <Setting property="prop2">value2</Setting>
    </SiteNames>
</Settings>

, а мой .js:

function setValues(){
    var xmlPath = Session.Property("IS_BROWSE_FILEBROWSED");
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

    xmlDoc.async = "false";
    xmlDoc.load(xmlPath);

    var elem = xmlDoc.getElementsByTagName("Setting");
    for (var i=0; i<elem.length; i++){
        Session.Property(elem[i].getAttribute("property")) = elem[i].childNodes[0].nodeValue);
    }
}

Это что-то не так?значения моего свойства не меняются ..

Сценарий запускается при нажатии кнопки.Я не знаю, что мне нужно сделать, чтобы это сработало.

Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Я отказался от функции jscript .. это не сработало .. Я не знаю почему.

Вместо этого я использую vbScript (это мой первый раз :) Я использую vbscripts)

Dim xmlPath  
Dim xmlDoc
xmlPath = Session.Property("IS_BROWSE_FILEBROWSED")
set xmlDoc = CreateObject("Microsoft.XMLDOM")

xmlDoc.async = "false"
xmlDoc.load(xmlPath)    

for each x in xmlDoc.getElementsByTagName("Setting")           
    Session.Property(x.getAttribute("property")) = x.text
next

Работает очень хорошо! Спасибо, что направил меня, Кристиан Пэйнтер!

0 голосов
/ 11 ноября 2011

Вам необходимо пользовательское действие, которое может использовать XML DOM для чтения XML-файла и вызова MsiSetProperty () для установки различных свойств.

Например:

<Settings>
  <Setting Id="SOMEPROP1">SOMEVALUE</Setting>
  <Setting Id="SOMEPROP2">SOMEVALUE</Setting>
</Setting>

Тогда этопросто (псевдокод)

for each Setting element in Settings
  MsiSetProperty( setting.ID, setting.InnerText )
next

Кроме того, внутренний встроенный пользовательский интерфейс MSI имеет только браузер каталогов, а не элемент управления обозревателем файлов, поэтому вам придется либо сохранять имя файла постоянным и просматривать каталог, либо работать сконтроль выбора файлов в ваше пользовательское действие также.

...