WIX 安装程序从 XmlConfig 元素中删除条目
WIX Installer remove entry from XmlConfig element
如何使用 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>
如何使用 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>