Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在WiX中运行指示灯时,DefaultDir无效_.net_Wix_Windows Installer - Fatal编程技术网

.net 在WiX中运行指示灯时,DefaultDir无效

.net 在WiX中运行指示灯时,DefaultDir无效,.net,wix,windows-installer,.net,Wix,Windows Installer,我只想做一个安装程序,将一些文件移动到程序文件,设置一个开始菜单链接,并出现在添加/删除程序中卸载。目前,我很高兴在“开始菜单”链接上下赌注,因为这似乎相对简单 需要注意的是,我特别希望它能够从脚本生成,而不需要任何全局安装。这意味着没有VisualStudio扩展,也没有WiX工具包的任何全局安装 我能够找到所有打包的正确可执行文件。所以我想用这些。我为蜡烛、灯和热设置别名,以便从工具/目录中绘制 首先,我创建了一个非常简单的文件结构,希望将其移动到Program Files/Foo中 /te

我只想做一个安装程序,将一些文件移动到程序文件,设置一个开始菜单链接,并出现在添加/删除程序中卸载。目前,我很高兴在“开始菜单”链接上下赌注,因为这似乎相对简单

需要注意的是,我特别希望它能够从脚本生成,而不需要任何全局安装。这意味着没有VisualStudio扩展,也没有WiX工具包的任何全局安装

我能够找到所有打包的正确可执行文件。所以我想用这些。我为
蜡烛
设置别名,以便从
工具/
目录中绘制

首先,我创建了一个非常简单的文件结构,希望将其移动到Program Files/Foo中

/temp/SourceDir/
  |- bar.txt
  |- one.txt
  |- afolder/
     |- baz.txt
我还使用一个WixSample项目并创建以下
/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>
它生成
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>
这将为每个对象生成一个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

在这一点上,我被难住了。我不知道这个错误意味着什么,也不知道如何修复它-为什么这个目录会导致问题?

我相信SourceDir是msi表中某个目录的保留名称。它引用正在运行的msi文件所在的目录。因此,当您尝试为id为“dirGQx5YQf5IXUdDl9BwSUIwBDODsQ”的目录创建另一个名为“SourceDir”的目录时,light会发出抱怨


尝试将W:\temp\SourceDir重命名为其他名称

Ok…那么我需要在foo.wxs中更改什么?有什么吗?不需要在foo.wxs中更改任何内容<代码>是允许的。我只是认为热量产生另一个名为“SourceDir”的dir是light所抱怨的。可能是Name=“SourceDir”的目录必须是根目录或TARGETDIR目录的值,这还不完全确定。我将目录重命名为
foo/
,重新加热并点亮
Dynamic.wxs
。现在
light
导致
W:\temp\Dynamic.wxs(7):错误LGHT0103:系统找不到文件“SourceDir\bar.txt”。
W:/temp/foo/bar.txt
肯定存在。您可能需要在heat cmd行中输入“-var.fooDir”,然后将“-d”fooDir=W:\temp\foo\”传递到candle.exe或在foo.wxs中定义-var将在heat-generated-Source标记中将“SourceDir”替换为$(变量)。这很有效!它安装在
程序文件(x86)\Dynamic
中,这不是我所期望的bug,我想我可以从中找到它。
temp> candle .\foo.wxs
temp> candle .\Dynamic.wxs
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