【问题标题】:COPYFILE post MSI Installation Using WIX使用 WIX 进行 MSI 安装后的 COPYFILE
【发布时间】:2013-03-08 06:13:11
【问题描述】:

请参阅以下声明;暂时我在 MSI 的安装项目中有硬编码的源和目标文件夹(这个文件夹是在安装过程中形成的)。注意:下面的文件路径是 MSI 软件包安装目标所在的路径,而不是源位置。如何通过隐藏 [INSTALLLOCATION]\App_Config\

等硬编码值来设置目标或源属性值的问题

到目前为止,我正在通过命令行传递 INSTALLLOCATION (E:\Websites\SCBUDirect\Website\SCBUDirect.B2CWeb) 并希望将目标文件夹值设置为 [INSTALLLOCATION]\App_Config\ 但不确定如何实现通过我尝试但未能使其工作的属性设置或自定义操作。

下面是需要复制的文件组件的片段(来自 heat.exe)。

<Component Id="cmp209B0DBB82F9FF15193D29F0BD337B7F" Directory="dirB0A921E55A598C65B18B4E47885629C3" Guid="{3B140259-FCC7-4D2E-8629-CBB879BBA46C}">
  <File Id="filBC5CC5B8DCC504F6DC75A7B2673E7D0D" KeyPath="yes" Source="C:\Workspaces\Chatra\Website\SCBUDirect.B2CWeb\App_Config\basic.log4net.dev" />
</Component>

这是我在 product.wxs 中的部分代码

<Fragment>
    <Property Id="SourceFilesFolder" Value="E:\Websites\SCBUDirect\Website\SCBUDirect.B2CWeb\App_Config\basic.log4net.dev" />

    <Property Id="DestFilesFolder" Value="E:\Websites\SCBUDirect\Website\SCBUDirect.B2CWeb\App_Config\" />


  <ComponentGroup Id="CopyFiles">
         <ComponentRef Id="CMP_LOG4TXT" />
    </ComponentGroup>

      <Component Id="CMP_LOG4TXT" Guid="341BD660-7249-42DD-9744-DBEF0776AD52"  Directory="INSTALLLOCATION" KeyPath="yes">
        <CopyFile Id="Copy_LOG4TXT" 
              SourceProperty="SourceFilesFolder" 
              DestinationProperty="DestFilesFolder" 
              DestinationName="basic.log4net" />
      </Component>

</Fragment>

【问题讨论】:

  • 我将首先使用msiexec /i yourProduct.msi /lvoicewarmupx log.txt 运行 msi,然后在生成的 log.txt 中搜索组件的 Id 和 Guid,看看它是否为您提供了任何有用的信息。
  • CopyFileInstallExecuteSequence 之前不会复制文件
  • 您好,现在我可以找出问题所在,我没有在功能中指定复制组件。但现在我不想硬编码源和目的地。有没有可能做到这一点。截至目前,我正在通过命令行传递 INSTALLLOCATION (E:\Websites\SCBUDirect\Website\SCBUDirect.B2CWeb) 并希望将目标文件夹值设置为 [INSTALLLOCATION]\App_Config\ 但不确定如何通过属性设置来实现或我尝试过但未能成功的自定义操作。
  • Natalie Carr,您能否提供更多有关 InstallExcuteSequence 的详细信息?以及此操作的解决方案如何。而且我也修改了问题以明确它
  • 使用SetProperty 设置目标属性。

标签: xml installation wix


【解决方案1】:

你可以像这样使用相对路径:

<Component Id="comp_Include_0" DiskId="1" KeyPath="yes" Guid="D026AE84-0F34-4715-810D-4EB6656DFECD">
    <File Id="file_Include_0" Source="..\Include\3rdParty\ac_types2.6\ac_complex.h" />
</Component>

“..\”
表示例如 bin\release 文件夹 它是这样声明的:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFiles64Folder">
      <Directory Id="INSTALLFOLDER" Name="ATE" >
      </Directory>
    </Directory>
</Directory>

你需要声明

<DirectoryRef Id="INSTALLFOLDER">

我发现创建 wix 安装程序的最简单方法是对完整目录使用石蜡

【讨论】:

    【解决方案2】:

    [INSTALLLOCATION] 文件路径的Pattern Saving 需要在这里进行,这样在安装和卸载的时候就保存了文件路径。否则我们会收到网络搜索错误。

    <product>
    
        <Property Id="INSTALLLOCATION">
              <RegistrySearch Id="REMEMBERPROPERTY" Root="HKCU" Key="Websites\SCBUDirect" Name="Remembered" Type="raw"/> 
        </Property>
    
            <CustomAction Id="SAVEINSTALLDIR" Property="CMDREMEMBERPROPERTY" Value="[INSTALLLOCATION]"/>
            <CustomAction Id="SETINSTALLDIR" Property="INSTALLLOCATION" Value="[CMDREMEMBERPROPERTY]" />
    
            <InstallExecuteSequence>
              <Custom Action="SAVEINSTALLDIR" Before="AppSearch"></Custom>
             <Custom Action="SETINSTALLDIR" After="AppSearch">CMDREMEMBERPROPERTY</Custom>
            </InstallExecuteSequence>
    
            <SetProperty Id="DestFilesFolder" Value="[INSTALLLOCATION]\Website\App_Config" After="CostInitialize" />
    
    </product>
    
    <fragment>
    
      <ComponentGroup Id="CopyFiles">
             <ComponentRef Id="CMP_LOG4TXT" />
        </ComponentGroup>
    
          <Component Id="CMP_LOG4TXT" Guid="341BD660-7249-42DD-9744-DBEF0776AD52"  Directory="dir572C565E70B3AEE6F0C29D3EE9056E9B" KeyPath="yes">
            <CopyFile Id="Copy_LOG4TXT"         Source="E:\Websites\SCBUDirect\Website\SCBUDirect.B2CWeb\App_Config\basic.log4net.dev" DestinationProperty="DestFilesFolder" DestinationName="basic.log4net" />
          </Component>
    
    </fragment>
    

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多