WIX安装程序从XmlConfig元素中删除条目



如何删除"DrawListAddin">

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance">
<string>ExplorerAddin</string>
<string>DrawListAddin</string>
<string>MyDataAddin</string>
</ArrayOfString>

结果应该是这样的

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance">
<string>ExplorerAddin</string>
<string>MyDataAddin</string>
</ArrayOfString>

我尝试了多个设置,但没有工作。最后一个版本是这样的。搜索正确的项目,然后删除它。XML文件被修改,但没有变化。

<util:XmlConfig Id='XmlSettingsRemove' 
On="install"
File='[E3D31_INSTALL_DIR]DesignAddins.xml' 
Node='element'
Action='delete'                         
VerifyPath="//*[[]text() [[]contains(.,'DrawListAddin')[]][]]" 
ElementPath="//ArrayOfString" 
Sequence='1' 
/>

此代码会显示无法找到节点的错误消息,但会显示"/.."最后显式选择父正确的

<util:XmlConfig Id='XmlSettingsRemove' 
On="install"
File='[E3D31_INSTALL_DIR]DesignAddins.xml' 
Node='element'
Action='delete'                       
VerifyPath="/ArrayOfString/string[[]text()[[]contains(.,'DrawListAddin')[]][]]" 
ElementPath="/ArrayOfString/string[[]text()[[]contains(.,'DrawListAddin')[]][]]/.." 
Sequence='1' 
/>

仅供参考。这里是一个嵌入式脚本的解决方案。我在代码中加入了一些占位符,比如"DO_SOME_HERE". .

<CustomAction Id="UnInstallUIFileSetProperty" Property="UnInstallUIFileExec" Value="[PLACE_YOUR_PATH_TO_XML_FILE_HERE]" />  
<CustomAction Id="UnInstallUIFileExec" Script="vbscript" Execute='deferred' Impersonate='no' Return='ignore'>
<![CDATA[                     
on error resume next
c=Session.Property("CustomActionData")
n=c+"ADD_THE_XML_FILENAME_HERE"                                         

Set x = CreateObject("Microsoft.XMLDOM")                                            

x.async = False 
x.load(n)

Set r = x.documentElement                       
Set l = r.getElementsByTagName("string")
For Each e In l                         
if InStr(e.text,"ENTER_SEARCHTEXT_HERE") then
e.ParentNode.removeChild(e)
end if
Next            

if err.Number<>0 then
res=MsgBox("remove of addin failed: "+n)                        
else
x.Save(n)
end if

]]>
</CustomAction>

最新更新