我正在尝试在与应用程序安装位置不同的位置创建一个文件夹,恰好是C:\ Program Files(x86)。我正在使用以下片段
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Directory Id="PhotosDir" Name="Photos" />
</DirectoryRef>
<!--<SetDirectory Id="PhotosDir" Value="[TARGETDIR]Photos" Sequence="execute"></SetDirectory>-->
</Fragment>
我尝试使用如上所示的SetDirectory元素,并使用CustomAction,如下所示。 (如果我同时使用这两个,我会收到一个错误,说Id是重复的。因此我对它进行了评论。)
<CustomAction Id="SetPhotosDir" Directory="PhotosDir" Value="[TARGETDIR]Photos"></CustomAction>
<InstallExecuteSequence>
<Custom Action="SetPhotosDir" Before="CreateFolders"/>
</InstallExecuteSequence>
我还为此目录元素定义了一个组件,如下所示。
<Component Id="cmpPhotosDir" Guid="{8F757344-CA0A-42BC-B292-A51CE86B19E2}" KeyPath="yes" Directory="PhotosDir"><CreateFolder/></Component>
但名为Photos的目录总是在D盘中创建,即使它嵌套在TARGETDIR中。我实际上想要控制创建这个目录的位置,可能是通过UI。我用Google搜索了SetDirectory元素示例,但无法找到合适的工作样本。我所看到的是我必须使用自定义操作类型35或51.但是不清楚这些自定义操作应该包含哪些代码。此外,我不确定,除了SetDirectory元素之外是否还需要这些自定义操作。有人可以通过一些工作样本来帮助我实现这个目标吗?
答案 0 :(得分:0)
问题是您的目录标识符不是PUBLIC。更改名称不包括小写字母;仅使用大写字母,数字和下划线。 (最近这个问题反过来over here。)
我也可能会将操作安排到After="CostFinalize"
,或者只设置同名属性Before="CostInitialize
。然而,这些都不可能与您的症状相关。