12
votes

Dans WIX Comment puis-je sélectionner un site Web IIS par son nom?

Ce que je voudrais faire est de montrer à l'utilisateur de l'installateur une liste des sites Web sur leur serveur et de leur permettre de choisir une (à l'aide de la méthode décrite ici: http://www.cmcrossroads.com/content/view/13160/120/ , qui semble maintenant cassé voir ici pour le code de base). L'installateur créerait ensuite un répertoire virtuel dans le site Web choisi.

Cependant, ma recherche semble avoir révélé que le seul moyen de spécifier un site Web dans Wix est par IP, Port et en-tête. Demander ceux-ci n'est pas très convivial, donc je suis laissé avec l'idée d'écrire une deuxième action personnalisée pour obtenir ces informations sur un nom de site Web.

Y a-t-il une meilleure façon?

BTW Cela doit fonctionner à la fois dans IIS6 et IIS7 au cas où cela affecte la réponse.


0 commentaires

5 Réponses :


10
votes

OK, il est possible (dans IIS6 ou IIS7 avec la compatibilité de la métabase), grâce à Ceci Poste à la liste de diffusion Expliquez la manière légèrement bizarre que le système IIS: élément de site Web fonctionne. La partie utile est la suivante: xxx pré>

Donc, mon code Wix se termine comme: p>

<DirectoryRef Id="TARGETDIR">
  <Component Id="IisSetup" Guid="YOUR-GUID-HERE">
    <iis:WebVirtualDir Id="IisVirtualDir" Alias="[IIS_VIRTUALDIRNAME]" Directory="INSTALLLOCATION" WebSite="IisWebsite">
      <iis:WebApplication Id="IisWebApplication" Name="[IIS_VIRTUALDIRNAME]" WebAppPool="IisAppPool" Isolation="high"/>
    </iis:WebVirtualDir>
    <iis:WebAppPool Id="IisAppPool" Name="[IIS_APPPOOLNAME]" Identity="networkService"/>
  </Component>
</DirectoryRef>

<!-- Note that this entry should not be put under a component. If it is WiX
     will update the website on install and remove it on uninstall -->
<iis:WebSite Id="IisWebsite" Description="[IIS_WEBSITENAME]" SiteId="*">
  <iis:WebAddress Id="IisWebAddress" Port="80" />
</iis:WebSite>


0 commentaires

0
votes

Alors que cette question et cette réponse sont toujours valables, je pense que cela vaut la peine de vous demander si vous souhaitez vraiment utiliser le nom du site Web. Je souhaite le stocker pour une utilisation pendant la désinstallation, puis la sauvegarde de l'identifiant du site est probablement une meilleure idée. Auquel cas l'élément de site Web devient:

<iis:WebSite Id="IisWebsite" Description="Dummy" SiteId="[IIS_WEBSITEID]">
  <iis:WebAddress Id="IisWebAddress" Port="80" />
</iis:WebSite>


0 commentaires

3
votes

Dans mon installateur, je ne voulais pas créer de site Web. Je voulais permettre à l'utilisateur de sélectionner un site Web existant existant. Je l'ai fait avec une action personnalisée en JavaScript et un panneau UI personnalisé.


code d'action personnalisé: xxx


enregistrer les actions personnalisées comme ceci: xxx


Ceci est le .WXS pour le panneau d'interface utilisateur: xxx


Le panneau d'interface utilisateur présente une liste de liste, qui est automatiquement renseignée avec des éléments de la table de la liste de liste avec le Premier champ de site Web. Ce tableau est renseigné au moment de l'exécution par l'action personnalisée en JavaScript.

Pour appeler l'action personnalisée au bon moment, vous avez besoin de quelque chose comme celui-ci dans le fichier principal .wxs: xxx


2 commentaires

N'importe quelle idée pourquoi le script ci-dessus lancerait un "Iisenumsites: exception: 0x80004005: modifier, mode, enregistrement" message d'erreur?


Ah, non, je n'ai aucune idée.



0
votes

Répondre sur pour iisenumsites: Exception: 0x80004005: Modifier, mode, enregistrement

J'ai une expérience similaire et ce que j'ai trouvé jusqu'à présent est l'ID de site qui extrait de parseint : xxx

J'ai un site Web avec un nom comme w3svc / 1528550093 et je soupçonne 1528550093 est trop grand pour la table wiskwebites Table.

Une fois que j'ai la déclaration IF pour filtrer ces gros chiffres et que le script fonctionne bien.

espère que cette aide pour les autres .


0 commentaires

0
votes

Basé sur la réponse de Cheeso et une action personnalisée mise à jour pour utiliser C # avec Microsoft.Web.Administration plutôt que JavaScript avec WMI. Testé contre IIS 8.5.

CustomActions.cs: P>

<UI>

  <Dialog Id="IISDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">

    <Control Id="SelectWebSiteLabel" Type="Text" X="20" Y="73" Width="100" Height="15" NoPrefix="yes" Text="Select web site:" />
    <Control Id="SelectWebSiteCombo" Type="ListBox" X="20" Y="89" Width="200" Height="150" Property="WEBSITE" Sorted="yes" />

    <Control Id="VirtualHostLabel" Type="Text" X="235" Y="73" Width="100" Height="15" TabSkip="no" Text="&amp;Application Path Alias:" />
    <Control Id="VirtualHostTextbox" Type="Edit" X="235" Y="89"  Height="17" Width="120" Property="IIS_VIRTUAL_DIR" Indirect="no" />


    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="&amp;Back">
      <Publish Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">Installed</Publish>
      <Publish Event="NewDialog" Value="LicenseAgreementDlg" Order="2">NOT Installed</Publish>
    </Control>
    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="&amp;Next">
      <Publish Event="NewDialog" Value="CMParametersDlg">1</Publish>
      <Publish Event="DoAction" Value="UpdatePropsWithSelectedWebSiteAction">1</Publish>
    </Control>
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
      <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    </Control>
    <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="WixUI_Bmp_Banner" />
    <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
      <Text>Configure settings for your Web Server</Text>
    </Control>
    <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
      <Text>{\WixUI_Font_Title}Settings</Text>
    </Control>
    <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
  </Dialog>
</UI>


0 commentaires