我有多个安装程序(用于安装不同的应用程序和网站)的项目,它们都安装在同一个父文件夹(例如 \Websites)下。我的每个安装程序都会调用一个执行 C# 控制台应用程序(由所有安装程序共享)的 CustomAction,并传入几个特定于该安装程序的参数。
每个安装程序都会安装多个网站,每个网站都有自己的文件夹结构(例如 \Websites\App1、\Websites\App2 等)。
例如,在一个安装程序中:
<DirectoryRef Id="WebsitesFolder">
<Directory Id="App1Folder" Name="App1"/>
<Directory Id="App2Folder" Name="App2"/>
</DirectoryRef>
在另一个安装程序中:
<DirectoryRef Id="WebsitesFolder">
<Directory Id="App3Folder" Name="App3"/>
<Directory Id="App4Folder" Name="App4"/>
<Directory Id="App5Folder" Name="App5"/>
<Directory Id="App6Folder" Name="App6"/>
</DirectoryRef>
有没有办法将子目录列表枚举到逗号分隔的列表中,以作为参数传递给我的自定义操作?例如,如下所示。
<CustomAction Id="ConfigureWebsites" Directory="WebsitesFolder" ExeCommand=""[%DEPLOYEXE]" /d:"[WebsitesFolder]\<list child directories here>"" Execute="deferred" Return="ignore" />
在一个安装程序中生成以下内容:
deploy.exe /d:"C:\Websites\App1,C:\Websites\App2"
在第二个安装程序中:
deploy.exe /d:"C:\Websites\App3,C:\Websites\App4,C:\Websites\App5,C:\Websites\App6"
我知道我可以明确列出我的 CustomAction 中的所有子文件夹,但是这些项目正在增长,并且子文件夹一直被添加到这些安装程序中,或者文件夹名称可能会随着时间而改变,我不想维护文件夹列表多个地方的名字。
我希望 deploy.exe 具有特定文件夹列表的原因是因为它将遍历这些文件夹并执行许多自定义任务,并且我不希望它遍历该父文件夹下的每个网站,但只有作为当前安装一部分的网站文件夹。