多个PathEdit的值控制到多个属性

时间:2014-05-07 13:48:49

标签: wix wix3.8

我想用Microsoft Wix 3.8构建一个安装程序,它实际上只注册了一些COM组件,并为服务器共享上的程序创建了一些快捷方式。只是提前指出:这个程序是一个传统的工具,不幸的是它的启动或使用方式不会被改变。 所以我需要我的安装程序要求三个路径:服务器安装路径(如unc),以及另外两个路径,也在服务器上(也作为unc)。

我已经在第一条路上挣扎了。一旦我添加它,它似乎很难连接到我必须在我的product.wxs中指定的某个目录。

这就是我的product.wxs的样子:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
  <Product Id="613A5421-BF59-46DD-B363-05E55587B89F" Name="Test Client" Language="1033" Version="1.0.0" Manufacturer="Blub AG" UpgradeCode="A451E5EB-4AED-4A8A-ACBC-F65A34E86D45">
    <Package Id="*" InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MediaTemplate />
    <WixVariable Id="WixUIDialogBmp" Value="images\background.bmp" />    
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />    
    <UIRef Id="WixUI_InstallDir" />
    <Feature Id='Complete' Title='Foobar 1.0' Description='The complete package.'>
      <Feature Id='TestClient' Title='Test Client' Description='Test Client' Level='1'>
        <ComponentGroupRef Id='ProductComponents' />
      </Feature>
    </Feature>
  </Product>

  <Fragment>
    <PropertyRef Id="NETFRAMEWORK20"/>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="ExpoWin" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER" >
      <Component Id="ProductComponent">
        <File Source="Blub.txt" />
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>

(在我的原始代码中,我用自己的版本替换了WixUI_InstallDir,以便我可以修改它以询问三个路径。但要指出我的问题,上面的代码应该足够了) 我不想要&#34; INSTALLFOLDER&#34;链接到任何目录。但是一旦我改变了

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />

<Property Id="WIXUI_INSTALLDIR" Value="SERVERPATH" />
<Property Id="INSTALLFOLDER" Value="c:\program files (x86)\TestClient" />

然后运行安装程序我得到了&#34; 2343错误&#34;:

DEBUG:错误2343:指定的路径为空。 安装程序在安装此程序包时遇到意外错误。这可能表明此包装存在问题。错误代码是2343.参数是:,,

希望这个问题很容易回答。我在网上搜了几个小时。可能我完全不理解财产的概念。有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

以下解释可能无效100%,这是我向自己解释的方式;-)。
WiX获取属性的值并使用它来解析路径。在第一种情况下,它在目录结构中找到属性,因此可以解析路径。在第二个示例中,SERVERPATH只是字符串SERVERPATH,因此无法找到任何内容。您必须使用注册表搜索或具体路径或自定义操作来设置它 在UI和自定义对话框中对我有用的东西(我对安装文件夹和附加路径有类似的要求)是answer to a similar question

以下是通过自定义操作设置它的示例(在我的案例中,INSTALLLOCATION是从注册表中读取的,但它可以是任何路径; INSTALLDIR由WiX中的目录结构定义源文件):

<CustomAction Id="SetINSTALLDIR"  Property="INSTALLDIR" Value="[INSTALLLOCATION]" Execute="firstSequence" />
<InstallExecuteSequence>
        <Custom Action="SetINSTALLDIR" After="AppSearch">INSTALLLOCATION</Custom>
</InstallExecuteSequence>
<InstallUISequence>
        <Custom Action="SetINSTALLDIR" After="AppSearch">INSTALLLOCATION</Custom>
</InstallUISequence>

使用上面答案中描述的方法,我的WiX源文件中包含以下内容:

<Directory Id="LUCENEFOLDER" SourceName="LuceneIndex" />

然后,通过以下代码段在自定义对话框的UI中设置路径:

<Control Id="LuceneFolderLabel" Type="Text" X="5" Y="155" Width="200" Height="10" Text="Folder containing Multiindex.config of Lucene:" TabSkip="yes" />
<Control Type="PathEdit" Id="LuceneFolder" Width="200" Height="17" X="5" Y="165" Property="LUCENEFOLDER"/>
<Control Id="LuceneFolderBrwsButton" Type="PushButton" Width="56" Height="17" X="210" Y="164" Text="Change..." >
  <Publish Property="_BrowseProperty" Value="LUCENEFOLDER" Order="1">1</Publish>
  <Publish Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
</Control>