在我的inno设置脚本中有一个[code]部分,我需要添加一些代码:
我需要能够在\ documents \ docotype
中编辑名为config.xml的文件在文件中有一些代码如下:
<References>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>System.dll</string>
<string>System.Core.dll</string>
<string>System.Drawing.dll</string>
<string>System.Windows.Forms.dll</string>
<string>System.XML.dll</string>
</ArrayOfString>
</References>
我需要它看起来像这样:
<References>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>System.dll</string>
<string>System.Core.dll</string>
<string>System.Drawing.dll</string>
<string>System.Windows.Forms.dll</string>
<string>System.XML.dll</string>
<string>C:\\bin\Custom\cutty109.dll</string>
</ArrayOfString>
</References>
所以我只需要将以下行添加到'ArrayOfString'部分的文件中
<string>C:\\bin\Custom\cutty109.dll</string>
我确信这一定是可能的,但我不知道如何......
由于
答案 0 :(得分:3)
请参阅随新安装提供的CodeAutomation.iss example。并使用此代码代替“修改XML文档”部分下的原始代码。
{ Modify the XML document }
NewNode := XMLDoc.createElement('string');
XMLDoc.setProperty('SelectionLanguage', 'XPath');
RootNode := XMLDoc.selectSingleNode('//References/ArrayOfString');
RootNode.appendChild (NewNode);
RootNode.lastChild.text :='C:\\bin\Custom\cutty109.dll';
{ Save the XML document }
答案 1 :(得分:1)
我认为你真的需要一些动态的方法来添加到这个配置文件,如果没有那么当然覆盖旧的是最简单的方法。
要动态地将部分添加到配置文件,您有一些选择:
您可以创建自己的命令行实用程序( exe 或脚本)来执行文件操作,并在安装脚本的[Run]
部分中调用该实用程序。这看起来像这样:
在[Files]
部分,您的实用程序会有一行:
来源:“myUtil.exe”; DestDir:“{app}”
在[Run]
部分,您需要为配置中的每个操作设置一行,如下所示:
FileName:“{app} \ myUtil.exe”;参数:“/ addSection:”
或强>
您可以使用Pascal脚本来操作配置文件。您可以创建一个Pascal,使用CreateOleObject
为文件操作调用msxml.dll
XML。然后,在[Files]
部分,您可以使用AfterInstall
来调用您的Pascal函数,如下所示:
Source: "myFileThatNeedsConfigManipulation.dll"; DestDir: ... ;
AfterInstall: MyPascalFunctionThatDoesTheManipulation
答案 2 :(得分:0)
尝试这样的事情:
Dim sXPath : sXPath = "/configuration/References/ArrayOfString"
Dim sAdd : sAdd = "C:\\bin\Custom\cutty109.dll"
Dim sElm : sElm = "string"
Dim sFSpec : sFSpec = resolvePath( "..\data\config.xml" )
Dim oXDoc : Set oXDoc = CreateObject( "Msxml2.DOMDocument" )
oXDoc.setProperty "SelectionLanguage", "XPath"
oXDoc.async = False
oXDoc.load sFSpec
If 0 = oXDoc.ParseError Then
WScript.Echo sFSpec, "looks ok"
Dim ndFnd : Set ndFnd = oXDoc.selectSingleNode( sXPath )
If ndFnd Is Nothing Then
WScript.Echo "|", sXPath, "| not found"
Else
WScript.Echo "found |" & ndFnd.tagName & "|"
Dim ndNew : Set ndNew = oXDoc.createElement( sElm )
ndNew.appendChild oXDoc.createTextNode( sAdd )
ndFnd.appendChild ndNew
WScript.Echo "After appending:"
WScript.Echo oXDoc.xml
oXDoc.Save Replace( sFSpec, ".xml", "-2.xml" )
End If
Else
WScript.Echo oXDoc.ParseError.Reason
End If
步骤: