WiX: Установка каталога установки из RegistySearch вызывает ошибку "Не удалось получить доступ к сетевому расположению"

Я делаю установщик на основе WixUI_Advanced. Я использую решение здесь: WiX: Как переопределить "C:\Program Files (x86)" на компьютере x64 в последовательности WixUI_Advanced?

Однако я хочу, чтобы установщик запомнил предыдущий каталог установки. Попытка установить свойство APPLICATIONFOLDER приводит к ошибке "Не удалось получить доступ к сетевому расположению", за которой следует имя каталога. Это происходит только в том случае, если значение действительно найдено в реестре (при обновлении программы).

Вот соответствующий код:

<Product Id="*" Name="$(var.ProductName)" Language="1033" Version="$(var.Version)" Manufacturer="OronDF343" UpgradeCode="22187c5e-5fd6-4734-802e-236abd321433">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Description="$(var.ProductName)" />

<PropertyRef Id="NETFRAMEWORK45" />
<Condition Message="This application requires .NET Framework 4.5.1 or later. Please install .NET Framework version 4.5.1 or higher and then run this installer again.">
  <![CDATA[Installed OR (NETFRAMEWORK45 >= "#378758")]]>
</Condition>

    <MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of $(var.GlobalProductName) is already installed." />

<!-- This is where the problem is. This is how it was implemented in the solution linked above, but I have tried it without the SetDirectory. -->
<Property Id="APPLICATIONFOLDER" Secure="yes">
  <RegistrySearch Id="RegistrySearch" Type="raw" Root="HKLM" Win64="$(var.Win64)" Key="Software\$(var.Company)\$(var.ProgID)" Name="InstallLocation" />
</Property>
<SetDirectory Id="APPLICATIONFOLDER" Value="[$(var.PlatformProgramFilesFolder)]$(var.GlobalProductName)">APPLICATIONFOLDER=""</SetDirectory>
<!---->

    <MediaTemplate EmbedCab="yes" />

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="DesktopFolder" Name="Desktop" />
  <Directory Id="$(var.PlatformProgramFilesFolder)">
    <Directory Id="APPLICATIONFOLDER" Name="$(var.GlobalProductName)">
      <Directory Id="skins" Name="skins"/>
    </Directory>
  </Directory>
  <Directory Id="ProgramMenuFolder">
    <Directory Id="ApplicationProgramsFolder" Name="$(var.GlobalProductName)"/>
  </Directory>
</Directory>

<Property Id="ApplicationFolderName" Value="$(var.GlobalProductName)" />
<Property Id="WixAppFolder" Value="WixPerMachineFolder" />
<WixVariable Id="WixUISupportPerUser" Value="0" />
<WixVariable Id="WixUILicenseRtf" Value="gpl-3.0.rtf" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch $(var.GlobalProductName)" />
<Property Id="WixShellExecTarget" Value="[#$(var.Project.TargetFileName)]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

    <Feature Id="ProductFeature" Title="$(var.ProductName) Core Files" Level="1" Absent="disallow">
  <ComponentRef Id="CreateDirectories" />
        <ComponentGroupRef Id="ProductComponents" />
  <ComponentGroupRef Id="RegistryStuff" />
    </Feature>
<UI>
  <UIRef Id="WixUI_Advanced" />
  <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
<!--Hacks for WixUI_Advanced install folder-->
<CustomAction Id="OverwriteWixSetDefaultPerMachineFolder" Property="WixPerMachineFolder" Value="[APPLICATIONFOLDER]" Execute="immediate" />
<CustomAction Id="SetARPINSTALLLOCATION" Property="ARPINSTALLLOCATION" Value="[APPLICATIONFOLDER]" />
<InstallUISequence>
  <Custom Action="OverwriteWixSetDefaultPerMachineFolder" After="WixSetDefaultPerMachineFolder" />
</InstallUISequence>
<InstallExecuteSequence>
  <Custom Action="OverwriteWixSetDefaultPerMachineFolder" After="WixSetDefaultPerMachineFolder" />
  <Custom Action="SetARPINSTALLLOCATION" After="InstallValidate"/>
</InstallExecuteSequence>
</Product>

РЕДАКТИРОВАТЬ: я не включил код, который сохраняет значение реестра, но он был сохранен как "[APPLICATIONFOLDER]" и удаление двойных кавычек исправило его для новой установки. Также забыл скобки в SetDirectory

0 ответов

Другие вопросы по тегам