Значения нескольких элементов управления 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>