首页 文章

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

提问于
浏览
0

我在InstallShield 2010中使用Basic MSI Project构建了一个安装程序 .

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

问题是我有很多这个textBoxes和很多步骤 . 我想添加用户在向导的步骤之一中浏览.xml文件的可能性,然后跳过在文本框中插入数据的所有步骤 .

我想在我的安装程序项目中,我必须为每个变量设置一个值或一个路径的默认值(我知道我需要的值在xml中的确切位置),条件是用户指向xml .

如果浏览的xml没有我需要的相同模板,我现在会忽略,让我说我会找到路径 .

问题是我如何设置我的项目中的变量,以防浏览xml文件?

Latest edit:

我的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);
    }
}

这有什么不对吗?我的 property Value 没有改变..

按下按钮时脚本正在运行 . 我不知道为了这个我需要做些什么 .

谢谢你的时间 .

2 回答

  • 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只有目录浏览器而不是文件浏览器控件,因此您必须保持文件名不变并浏览目录或将文件选择控件也用于自定义操作 .

  • 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!

相关问题