0

我想用 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,以便我可以修改它以要求三个路径。但要指出我的问题,上面的代码就足够了)我不希望将“INSTALLFOLDER”链接到任何目录。但是一旦我改变

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

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

并运行安装程序,我收到“2343 错误”:

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

好吧,希望这个问题很容易回答。我已经在网上搜索了几个小时。可能我还没有完全理解属性的概念。有人可以对此有所了解吗?

4

1 回答 1

0

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

这是通过自定义操作设置它的示例(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>
于 2014-05-07T14:59:15.963 回答