在安装过程中,我的应用程序将:
步骤A,查找C:\WebService
目录。如果找到,请执行以下操作:
copy *.bat --> C:\WebService\
copy boost*.dll --> C:\WebService\libs\
copy myApp.dll --> C:\WebService\plugins\
步骤B,如果未找到,请执行以下操作:
copy *.bat --> [LocalAppData]\myApp\bin\
copy *.dll --> [LocalAppData]\myApp\libs\
我该怎么做?
修改
我完成了第2步:
创建源目录:
src\bin
src\libs
将文件复制到这些子目录
使用heat
扫描src目录并将组生成为wxs文件。
这里的问题是,对于步骤A,我必须再次做同样的事情。但是有大量的* .dll,将它们再次复制到另一个目录看起来并不是一个好主意。
答案 0 :(得分:3)
您表达问题的方式表明您对Windows Installer的理解存在巨大差距。 MSI / WiX不是脚本语言。您需要了解AppSearch,功能,Directorties,组件和条件的工作原理。基本上,您需要将文件分组为组件,并使用AppSearch检测目录是否存在。然后在条件中使用该搜索的结果来决定安装哪些文件。
答案 1 :(得分:0)
好的,终于解决了。
简而言之,我是通过编写C ++程序来帮助的。
详细信息如下..
我的wxs就像:
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='WebDir'>
<Directory Id='INSTALLDIR' Name='$(var.ProductName)'/>
</Directory>
<Directory Id='DefaultDir'/>
</Directory>
现在使用heat
收集我的源目录,为candle
生成另一个wxs文件,并light
链接
然后是我的C ++程序,它被设计为
可以引用这个新组件组有条件地安装,取决于是否有注册表项,或者是否找到该目录,在我的情况下它是:
<Feature Id='RuntimeChrome' Level='1'>
<Condition Level='0'>NOT INSTALLDIR_REGCU AND NOT INSTALLDIR_REGLM</Condition>
<ComponentGroupRef Id='WebGroup' />
</Feature>
<Feature Id='RuntimeDefault' Level='1'>
<ComponentGroupRef Id='DefaultGroup' />
</Feature>
使用这些wxs文件,可以在不同的场景下将软件包安装到不同的位置。