如何使用installShield 2010中的现有xml文件设置变量

时间:2011-11-10 10:33:59

标签: installshield

我使用InstallShield 2010中的Basic MSI Project构建安装程序。

我的设置包含带有textBoxes等输入的自定义对话框。每个TextBox都将变量与默认值相关联。软件包工具包还包含一个由安装程序生成的.xml文件,其中包含特定路径中向导中设置的值。这很有效。

问题是我有很多这个textBoxes和很多步骤。我希望为用户添加一个向导步骤中浏览.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 :(得分:0)

您需要一个自定义操作,可以使用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的内部本机UI只有目录浏览器而不是文件浏览器控件,因此您必须保持文件名不变并浏览目录或将文件选择控件也用于自定义操作。

答案 1 :(得分:0)

我放弃了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

效果很好! 感谢指导我Christipher Painter!