C# 如何使用CustomAction在WIX中设置目录路径?
我在WIX中有这样的目录结构C# 如何使用CustomAction在WIX中设置目录路径?,c#,wix,custom-action,C#,Wix,Custom Action,我在WIX中有这样的目录结构 <Directory Id="TARGETDIR" Name="SourceDir" > <Directory Id="XXXFOLDER" Name="XXX"> <Directory Id="YYYFOLDER" Name="YYY"> <Directory Id="M
<Directory Id="TARGETDIR" Name="SourceDir" >
<Directory Id="XXXFOLDER" Name="XXX">
<Directory Id="YYYFOLDER" Name="YYY">
<Directory Id="MAINFOLDER" Name="MAIN">
我的自定义操作如下所示:
<CustomAction Id="GETDATAPATH" BinaryKey="InstallerCA"
DllEntry="GetNewDataPath" Execute="immediate"/>
以下是安装顺序:
<Custom Action="GETDATAPATH" Before="CostFinalize" />
sNewDataDir包含以下值=“E:\XXX\YYY\MAIN”,我将其分配给会话[“MAINFOLDER”]。它被分配。但它并没有反映在WIX端,因为我的文件仍然被复制到D:\XXX\YYY\Main,而不是分配给E:\XXX\YYY\Main。如何使用CustomAction更改会话[“MAINFOLDER”]的目录路径?这通常是一个顺序问题。属性的值在CostFinalize操作期间分配给目录路径。在执行序列中运行CostFinalize之前,必须对上面的自定义操作进行排序 这也可能是一个特权问题:MAINFOLDER可能是一个受限制的公共属性,并且不在执行序列中(如果自定义操作在执行序列中运行,则不适用)。看看这是否是你的问题 它也可以是您的计算机或其他脚本引擎
要想有一个好主意(或者至少找一个能找出问题真正所在的人),你需要为失败的尝试生成一个良好的日志。大多数情况下(或/l*v)是最好的使用价值(倾向于提供您想要的大部分但不是全部,以及您不想要的太多),也是大多数安装开发专家在生成他们使用和共享的日志时使用的价值。不过,它确实会让您的安装速度慢一些。这通常是一个顺序问题。属性的值在CostFinalize操作期间分配给目录路径。在执行序列中运行CostFinalize之前,必须对上面的自定义操作进行排序 这也可能是一个特权问题:MAINFOLDER可能是一个受限制的公共属性,并且不在执行序列中(如果自定义操作在执行序列中运行,则不适用)。看看这是否是你的问题 它也可以是您的计算机或其他脚本引擎
要想有一个好主意(或者至少找一个能找出问题真正所在的人),你需要为失败的尝试生成一个良好的日志。大多数情况下(或/l*v)是最好的使用价值(倾向于提供您想要的大部分但不是全部,以及您不想要的太多),也是大多数安装开发专家在生成他们使用和共享的日志时使用的价值。不过,它确实会让你的安装速度慢一些。@B.Murri-我尝试在Before属性中应用CostInitialize,但它不起作用。我已经编辑了上面的代码以添加CustomAction。你能检查一下吗?看起来不错。您的日志记录显示了被调用的操作的哪些方面?最终纠正了问题。我只是在更改父文件夹路径,即MAINFOLDER路径,而不是MAINFOLDER中的文件夹,因为该路径没有更新。现在,我通过自定义操作手动更新了文件夹的所有路径,效果很好。谢谢@B.Murri-我尝试在Before属性中应用CostInitialize,但它不起作用。我已经编辑了上面的代码以添加CustomAction。你能检查一下吗?看起来不错。您的日志记录显示了被调用的操作的哪些方面?最终纠正了问题。我只是在更改父文件夹路径,即MAINFOLDER路径,而不是MAINFOLDER中的文件夹,因为该路径没有更新。现在,我通过自定义操作手动更新了文件夹的所有路径,效果很好。谢谢
<Custom Action="GETDATAPATH" Before="CostFinalize" />