2011-09-08 18 views
20

Estoy tratando de crear un instalador usando WiX que no muestra el acuerdo de licencia al inicio. Pero obtengo el error como a continuación.El instalador de WiX falla con el código de error 2819

Screenshot

Este es el archivo completo Product.wxs que tengo en este momento. Compila y construye OK. ¿Por qué recibo un error como este? ¿Mi sección de Fragmentos está en el lugar correcto? Eliminé los elementos de publicación correspondientes a la licencia y modifiqué el siguiente botón del diálogo de bienvenida para mostrar el cuadro de diálogo del directorio de instalación en lugar del acuerdo de licencia. Esto es como se menciona en el archivo de ayuda chm. ¿Qué me estoy perdiendo entonces?

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="077765d1-236d-4299-b751-f921828f2ac8" 
      Name="Wix Setup Example" 
      Language="1033" 
      Version="1.0.0.0" 
      Manufacturer="NBL" UpgradeCode="1b0f72a7-8e17-4897-9f96-66509cc39573"> 

     <Package InstallerVersion="200" Compressed="yes" /> 

     <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder" > 
       <Directory Id="INSTALLLOCATION" Name="My Application Folder"> 
        <Component Id="ProductComponent" Guid="MY-GUID-HERE"> 
         <File Id="WindowsFormsApp.exe" 
          Source="../WindowsFormsApp/bin/Debug/WindowsFormsApp.exe"> 
         </File> 
        </Component> 
       </Directory> 
      </Directory> 
     </Directory> 

     <Feature Id="ProductFeature" Title="WixSetupProject" Level="1"> 
      <ComponentRef Id="ProductComponent" /> 
     </Feature> 

     <UI Id="WixUI_Advanced"> 
      <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" /> 
      <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" /> 
      <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> 

      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" /> 
      <Property Id="WixUI_Mode" Value="Advanced" /> 

      <DialogRef Id="BrowseDlg" /> 
      <DialogRef Id="DiskCostDlg" /> 
      <DialogRef Id="ErrorDlg" /> 
      <DialogRef Id="FatalError" /> 
      <DialogRef Id="FilesInUse" /> 
      <DialogRef Id="MsiRMFilesInUse" /> 
      <DialogRef Id="PrepareDlg" /> 
      <DialogRef Id="ProgressDlg" /> 
      <DialogRef Id="ResumeDlg" /> 
      <DialogRef Id="UserExit" /> 

      <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish> 
      <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish> 

      <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish> 

      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish> 
      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="1">Installed AND PATCH</Publish> 

      <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish> 
      <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish> 
      <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish> 

      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish> 
      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish> 
      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish> 

      <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish> 

      <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> 
      <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> 
      <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish> 

      <Property Id="ARPNOMODIFY" Value="1" /> 
     </UI> 
     <UIRef Id="WixUI_Common" /> 
    </Product> 
    <Fragment> 
     <Property Id="ApplicationFolderName" Value="My Application Folder" /> 
     <Property Id="WixAppFolder" Value="WixPerMachineFolder" /> 

     <WixVariable Id="WixUISupportPerUser" Value="1" Overridable="yes" /> 
     <WixVariable Id="WixUISupportPerMachine" Value="1" Overridable="yes" /> 

     <PropertyRef Id="ApplicationFolderName" /> 
    </Fragment> 
</Wix> 

La versión editada del archivo de WiX que le da ningún error. Esta versión sin embargo, se salta la función de instalación y busque el diálogo de archivo:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="077765d1-236d-4299-b751-f921828f2ac8" 
      Name="Wix Setup Example" 
      Language="1033" 
      Version="1.0.0.0" 
      Manufacturer="NBL" UpgradeCode="1b0f72a7-8e17-4897-9f96-66599gg39573"> 

     <Package InstallerVersion="200" Compressed="yes" /> 

     <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLLOCATION" Name="My Application Folder"> 
        <Component Id="ProductComponent" Guid="17e13748-8d44-47f6-b020-66d29f8a84fe"> 
         <File Id="WindowsFormsApp.exe" 
          Source="../WindowsFormsApp/bin/Debug/WindowsFormsApp.exe"> 
         </File> 
        </Component> 
       </Directory> 
      </Directory> 
     </Directory> 

     <Feature Id="ProductFeature" Title="WixSetupProject" Level="1"> 
      <ComponentRef Id="ProductComponent" /> 
     </Feature> 

     <UI Id="WixUI_Advanced"> 
      <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" /> 
      <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" /> 
      <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> 

      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" /> 
      <Property Id="WixUI_Mode" Value="Advanced" /> 
      <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" /> 

      <DialogRef Id="BrowseDlg" /> 
      <DialogRef Id="DiskCostDlg" /> 
      <DialogRef Id="ErrorDlg" /> 
      <DialogRef Id="FatalError" /> 
      <DialogRef Id="FilesInUse" /> 
      <DialogRef Id="MsiRMFilesInUse" /> 
      <DialogRef Id="PrepareDlg" /> 
      <DialogRef Id="ProgressDlg" /> 
      <DialogRef Id="ResumeDlg" /> 
      <DialogRef Id="UserExit" /> 

      <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish> 
      <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish> 

      <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish> 

      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="BrowseDlg" Order="1">1</Publish> 
      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="1">1</Publish> 

      <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="BrowseDlg">1</Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish> 
      <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish> 
      <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish> 
      <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish> 

      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="1">NOT Installed</Publish> 
      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish> 
      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish> 

      <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish> 

      <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> 
      <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish> 
      <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish> 

      <Property Id="ARPNOMODIFY" Value="1" /> 
     </UI> 
     <UIRef Id="WixUI_Common" /> 
    </Product> 

    <Fragment> 
     <Property Id="ApplicationFolderName" Value="My Application Folder" /> 
     <Property Id="WixAppFolder" Value="WixPerMachineFolder" /> 

     <WixVariable Id="WixUISupportPerUser" Value="1" Overridable="yes" /> 
     <WixVariable Id="WixUISupportPerMachine" Value="1" Overridable="yes" /> 

     <PropertyRef Id="ApplicationFolderName" /> 
     <UI > 
      <Dialog Id="CustomBrowseDlg" Width="370" Height="270" Title="!(loc.BrowseDlg_Title)"> 
       <Control Id="PathEdit" Type="PathEdit" X="25" Y="202" Width="320" Height="18" Property="_BrowseProperty" Indirect="yes" /> 
       <Control Id="OK" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUIOK)"> 
        <Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish> 
        <Publish Event="EndDialog" Value="Return">1</Publish> 
       </Control> 
       <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> 
        <Publish Event="Reset" Value="0">1</Publish> 
        <Publish Event="EndDialog" Value="Return">1</Publish> 
       </Control> 
       <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="!(loc.BrowseDlgComboLabel)" /> 
       <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes"> 
        <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" /> 
       </Control> 
       <Control Id="WixUI_Bmp_Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgWixUI_Bmp_UpTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgWixUI_Bmp_Up)"> 
        <Publish Event="DirectoryListUp" Value="0">1</Publish> 
       </Control> 
       <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgNewFolder)"> 
        <Publish Event="DirectoryListNew" Value="0">1</Publish> 
       </Control> 
       <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="98" Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" /> 
       <Control Id="PathLabel" Type="Text" X="25" Y="190" Width="320" Height="10" TabSkip="no" Text="!(loc.BrowseDlgPathLabel)" /> 
       <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.BrowseDlgBannerBitmap)" /> 
       <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" /> 
       <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> 
       <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.BrowseDlgDescription)" /> 
       <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.BrowseDlgTitle)" /> 
      </Dialog> 
     </UI> 
    </Fragment> 
</Wix> 

Respuesta

37

Extracción de que obtiene el siguiente error en los registros de MSI:

DEBUG: Error 2819: Control Folder on dialog InstallDirDlg needs a property linked to it 

Básicamente esto significa que el "Buscar carpeta" control no está vinculado a un valor real de la propiedad. Que ha utilizado el valor INSTALLLOCATION para la carpeta de la aplicación - que a su vez significa que tendrá que añadir la siguiente valor para vincular el diálogo:

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

Buena suerte!

+1

Gracias. Tenía un guid válido en el guión. Simplemente ponga "MY-GUID-HERE" para esta publicación. :) De todos modos, actualicé el script con la propiedad que especificó e hice algunos cambios. Ahora esto elimina el error y puedo omitir la parte del contrato de licencia. Pero ya no me pide la carpeta de browze e instalo el cuadro de diálogo de funciones. ¿Podrían revisar mi archivo y ver lo que podría estar perdiendo? Gracias. – user20358

5

Código de error 2819 significa "control [3] sobre el diálogo [2] necesita una propiedad vinculada a ella" (tomado de Windows Installer Error Messages). Si extrae los rastreos de MSI (agregue/l * v a la línea de comandos) podrá ver qué representan [3] y [2] y continuar la depuración desde allí.

+0

¿cómo se extraen las trazas de MSI? – user20358

+0

como escribí en la respuesta add/l * v a la línea de comandos de msiexec –

+2

@ user20358 Ejecute la instalación con 'msiexec/i product.msi/l * vx install.log'. –

5

Mi experiencia es: debe agregar el atributo de propiedad en la etiqueta de control. Me gusta:

<Control Id="NameEdit" Type="Edit" X="45" Y="85" Width="220" Height="18" Property="USERNAME" Text="{80}" /> 
Cuestiones relacionadas