Значения нескольких элементов управления PathEdit для нескольких свойств

Я хочу создать установщик с 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. Аргументы:

Надеюсь, на этот вопрос легко ответить. Я искал в Интернете часами. Возможно, я не полностью понял концепцию свойств. Может кто-то пролить свет на это?

1 ответ

Решение

Следующее объяснение может быть неверным на 100%, это способ, которым я объясняю это себе;-).
WiX принимает значение свойства и использует его для определения пути. В первом случае он находит свойство в структуре каталогов, поэтому путь может быть разрешен. Во втором примере SERVERPATH это просто строка SERVERPATHтак что ничего не могу найти. Вы должны либо установить его с помощью поиска в реестре, либо по конкретному пути, либо с помощью специального действия.
То, что отлично работало для меня в пользовательском интерфейсе и пользовательских диалогах (у меня было такое же требование с установочной папкой и дополнительным путем), было ответом на аналогичный вопрос.

Вот пример для установки с помощью настраиваемого действия (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" />

Затем путь задается в пользовательском интерфейсе в настраиваемом диалоговом окне с помощью следующего фрагмента:

<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>
Другие вопросы по тегам