我只是想做一个安装程序,将一些文件移动到Program Files,设置一个开始菜单链接,并出现在要卸载的添加/删除程序中。目前我很乐意在开始菜单链接上进行搜索,因为这似乎相对简单
需要注意的是,我特别希望这可以从脚本构建,而不需要任何类型的全局安装。这意味着没有Visual Studio扩展,也没有WiX工具包的全局安装。
我能够找到WiX on nuget,它似乎附带了所有正确的可执行文件。所以我想用这些。我为candle
,light
和heat
设置了别名,以便从tools/
目录中进行绘制。
首先,我创建了一个非常简单的文件结构,我想将其移入Program Files / Foo
/temp/SourceDir/
|- bar.txt
|- one.txt
|- afolder/
|- baz.txt
我还使用WixSample项目和some recommendations来创建以下/temp/foo.wxs
:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<!-- Use * to generate product ID on every build -->
<Product Id="*" Language="1033" Manufacturer="gim" Name="Foo Sample" UpgradeCode="1750d746-841f-4a27-a0ba-661b093dac23" Version="1.0.0.0">
<Package Comments="comments!" Compressed="yes" Description="Attempting to learn Wix" InstallScope="perMachine" Manufacturer="gim"/>
<MediaTemplate EmbedCab="yes"/>
<!--Directory structure-->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="DYNAMIC" Name="Dynamic"/>
</Directory>
</Directory>
<!--Features-->
<Feature Id="AllOfTheFiles">
<ComponentGroupRef Id="CMPG_AllOfTheFiles"/>
</Feature>
</Product>
</Wix>
然后我跑
temp> heat dir W:\temp\SourceDir\ -cg CMPG_AllOfTheFiles -ke -dr DYNAMIC -gg -sfrag -o .\Dynamic.wxs
生成Dynamic.wxs
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Fragment>
<DirectoryRef Id="DYNAMIC">
<Directory Id="dirGQx5YQf5IXUdDl9BwSUIwBDODsQ" Name="SourceDir">
<Component Id="cmpGDFXrG8sOAaKgy928OXqQ2tfoYI" Guid="{19459DB2-B1C7-4981-A0B9-F1CA0027B458}">
<File Id="fil9Q22BRrI_M6KyGIXyzknyYKsXYM" KeyPath="yes" Source="SourceDir\bar.txt" />
</Component>
<Component Id="cmpiuJCUGMxrseFgAzuyEWugfL6co0" Guid="{C09CEC2D-675C-438A-815D-E97D80B46579}">
<File Id="filJdeJM1_v6rytDwKRYjkJ6S4Ukos" KeyPath="yes" Source="SourceDir\one.txt" />
</Component>
<Directory Id="dir1V3jm.snhkr1aYM.1IgU9rhSuSM" Name="afolder">
<Component Id="cmpnBgBnytwthO6y_QeTGG7n0P_cSw" Guid="{4AAC9123-F1FE-4DFF-B7EB-1D0A7053ECF9}">
<File Id="filDNjPHE_Pp2VbCtvIxLyegx_2prU" KeyPath="yes" Source="SourceDir\afolder\baz.txt" />
</Component>
</Directory>
</Directory>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="CMPG_AllOfTheFiles">
<ComponentRef Id="cmpGDFXrG8sOAaKgy928OXqQ2tfoYI" />
<ComponentRef Id="cmpiuJCUGMxrseFgAzuyEWugfL6co0" />
<ComponentRef Id="cmpnBgBnytwthO6y_QeTGG7n0P_cSw" />
</ComponentGroup>
</Fragment>
</Wix>
然后我跑
temp> candle .\foo.wxs
temp> candle .\Dynamic.wxs
为每个人生成一个wixobj。
最后我试着点亮这些。
temp> light .\foo.wixobj .\Dynamic.wixobj -o .\foo.msi -nologo
W:\temp\Dynamic.wxs(5) : error LGHT0204 : ICE03: Invalid DefaultDir string; Table: Directory, Column: DefaultDir, Key(s): dirGQx5YQf5IXUdDl9BwSUIwBDODsQ
此时我很难过。我不知道这个错误意味着什么,也不知道如何修复它 - 为什么该目录会导致问题?
答案 0 :(得分:3)
SourceDir是我相信msi表中目录的保留名称。它引用正在运行的msi文件所在的目录。当您尝试为id为“dirGQx5YQf5IXUdDl9BwSUIwBDODsQ”的dir创建名为“SourceDir”的另一个目录时,轻微抱怨
尝试将W:\ temp \ SourceDir重命名为其他内容