2009-04-03 4 views
16

J'ai un projet de configuration Web qui affiche par défaut le répertoire virtuel dans l'écran d'installation de la zone de texte. Je souhaite que le nom du répertoire virtuel ne puisse pas être édité par l'utilisateur et toujours par défaut celui que j'ai installé dans mon msi. Comment cela peut il etre accompli?Répertoire virtuel dans le projet de configuration Web

+0

De même, si cela ne peut pas être réalisé, comment puis-je obtenir la valeur du répertoire virtuel modifié en utilisant Context.Parameters []? – chugh97

Répondre

1

Passer au Wix et d'utiliser leur Web Extensions

+0

Je regarde le projet websetup car je ne suis pas intéressé par l'open source car l'org ne le permet pas. – chugh97

+1

Wix est écrit et maintenu par Microsoft, il était supposé faire partie de Visual Studio 10. De nombreuses versions (y compris la configuration d'Office 2007) utilisent Wix sans aucun problème. –

1

Sélectionnez votre projet d'installation, Affichage> Editeurs> Interface utilisateur, sélectionnez les boîtes de dialogue d'adresses d'installation, et les supprimer.

EDIT:

Comme le souligne Shay sur, les utilisateurs peuvent passer outre l'installation par défaut emplacement de la ligne de commande. Pour remplacer cela, vous devez définir la propriété TARGETDIR dans votre InstallExecuteSequence. Malheureusement, vous ne pouvez pas modifier cette séquence à partir de Visual Studio, vous devez utiliser Orca:

  1. Créez votre projet d'installation.
  2. Ouvrez le fichier MSI à partir d'Orca.
  3. Créez une nouvelle action personnalisée de Type 51 (propriété set) avec la source "TARGETDIR" (sans guillemets), Cible de votre dossier de destination et un nom unique pour Action (la convention consiste à utiliser un GUID avec trait de soulignement initial). Créez une nouvelle ligne dans InstallExecuteSequence avec votre nom unique pour Action, "NOT Installed" pour Condition, et un numéro de séquence avant l'utilisation de TARGETDIR (750 était la première utilisation dans l'échantillon que j'ai fait, donc j'ai utilisé une séquence de 555).
+0

la suppression de l'interface utilisateur permettrait toujours à l'utilisateur de modifier le répertoire d'installation via la ligne de commande. –

1

Org n'autorise pas l'open source ou la source ouverte GPL.

Solutions: * modifier l'action personnalisée (clic droit> Affichage> action personnalisée) pour fixer le répertoire virtuel et le chemin Changer la CustomActionData:

/targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="[TARGETVDIR]" /targetsite="[TARGETSITE]" 

Pour:

/targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="FIXED_NAME" /targetsite="[TARGETSITE]" 

Vous peut simplement supprimer l'adresse d'installation de l'interface utilisateur et configurer un composant qui transmet les informations à l'installation personnalisée

  • Ecrire un wrapper sur msbuild avec msbuildtasks
2

Afin d'obtenir le répertoire virtuel en utilisant Context.Parameters

  1. Ajouter une action personnalisée pour installer le noeud (utilisez cette url si vous voulez savoir comment pour ajouter des actions personnalisées)
  2. Cliquez avec le bouton droit de la souris sur l'action personnalisée et sélectionnez la fenêtre des propriétés.
  3. Pour la propriété CustomActionsData définie/targetvdir = "[TARGETVDIR]".
  4. Maintenant, dans votre classe d'installateur, vous pouvez obtenir le nom du répertoire virtuel par Context.Parameters ["targetvdir"]. J'espère que cela vous a aidé :)
33

Si vous ne voulez pas que l'utilisateur modifie le répertoire virtuel, vous pouvez simplement supprimer la boîte de dialogue "Adresse d'installation" de l'interface utilisateur.

  1. Le projet d'installation Right Click et sélectionnent "User Interface".
  2. Développez le nœud "Démarrer".
  3. Faites un clic droit sur "Adresse d'installation".
  4. Sélectionnez « Supprimer »

Si vous voulez différents paramètres pour le site Web, le répertoire virtuel, pool d'applications qui est normalement sélectionnée par la boîte de dialogue d'adresse de l'installation, vous pouvez remplacer avec une action personnalisée que d'autres ont décrit.

Cependant, dans mes actions expérience personnalisées ne permettent pas à la mise en défaut que l'utilisateur peut changer, car ils exécutent Après les boîtes de dialogue qui demandent l'entrée d'utilisateur.

La méthode la plus simple pour définir certaines valeurs par défaut que l'utilisateur peut remplacer si nécessaire dans une boîte de dialogue est la suivante.

  1. Enlever la page d'accueil.
  2. Ajoutez une boîte de dialogue Textboxes (par exemple, "Textboxes (A)")
  3. Modifiez les propriétés visibles pour toutes les zones de texte à false afin qu'aucune zone de texte ne s'affiche.
  4. Modifiez la propriété BannerBitmap et BodyText afin qu'elle ressemble à une page de bienvenue .
  5. Définissez les propriétés nécessaires que vous souhaitez remplacer dans le menu « Edition *** n < > propriété » et définissez la valeur par défaut dans le menu « Edition <n> *** Valeur ».

Les propriétés les plus utiles (IMHO) sont.

TARGETDIR - Où les fichiers doivent être copiés.
TARGETVDIR - Répertoire virtuel à créer sur le site spécifié.
TARGETAPPPOOL - Le pool d'applications à utiliser (REMARQUE: Il doit exister, il ne sera pas créé)
TargetSite - Le site où le répertoire virtuel doit être créé (NOTE: Ceci est la valeur métabase pour le site web ... Par exemple: "/ LM/W3svc/2" Notez également que le site doit exister).

La liste complète des propriétés de l'installateur se trouve here. Si vous voulez vraiment mieux contrôler l'installation d'IIS, je vous suggère de changer votre projet en projet Windows Installer standard et de créer des actions d'installation personnalisées afin de pouvoir créer des AppPools par programme. Un bon endroit pour commencer à comprendre par programmation ces choses est here.

La principale raison de cette façon de faire est que des actions personnalisées fonctionnent après incitant mais la piscine d'applications et de sites Web doivent être créés avant l'installateur peut inviter.

+1

Cette note à propos de TARGETSITE étant une valeur de métabase a été une bouée de sauvetage - merci! – ladenedge

+0

Oui, j'ai cherché des heures pour TARGETSITE! À votre santé! – Markive

+0

à ma connaissance, vous êtes la seule personne sur Internet à documenter que TARGETAPPPOOL correspond au pool d'applications. TY –

3

Ça sonne bien en théorie, mais je peux dire que ça ne marche pas, du moins pas pour le réglage d'AppPool. J'ai une action personnalisée pour définir l'apppool (qui fonctionne d'ailleurs correctement lorsque le programme d'installation est construit avec VS2005) dans mon projet d'installation Web vs2008.

DirectoryEntry IISVdir = new DirectoryEntry(String.Format("IIS://{0}{1}/{2}", strServer, strRootSubPath, Vdir)); 
IISVdir.Properties["AppPoolId"].Value = appPool; 
IISVdir.CommitChanges(); 

Le programme d'installation qui fonctionne sans dialogue (supprimé l'adresse de l'installation de l'interface utilisateur nœud), mais la AppPool définie sur le répertoire virtuel se termine par être DefaultAppPool.

D'autres actions personnalisées dans ma classe d'assistance s'exécutent et fonctionnent.

Il doit donc y avoir d'autres incantations magiques nécessaires.

Merci.

+0

cela semble fonctionner à partir de la ligne de commande: XYZZX.msi/qr/TARGETAPPPOOL = "MyAppPoolName" Est-il possible de définir le paramètre TARGETAPPPOOL dans une action personnalisée? –

+0

Ok, puisque l'option de ligne de commande a fonctionné, peut-être cela: si (this.Context.Parameters.ContainsKey ("TARGETAPPPOOL")) \t this.Context.Parameters [ "TARGETAPPPOOL"] = appPool; sinon { \t this.Context.Parameters.Add ("TARGETAPPPOOL", appPool); Nope - toujours défini sur DefaultAppPool –

+1

Je viens d'avoir un problème similaire. Je pouvais seulement le résoudre en obtenant par l'action personnalisée pour courir à l'étape Commit, au lieu de l'étape d'installation. –

1

Solution Lo-tech: éditez le fichier vdproj dans notepad ++ pour définir le répertoire virtuel et supprimez la boîte de dialogue Adresse d'installation de l'éditeur d'interface utilisateur.

+0

Je me demande pourquoi personne d'autre n'a répondu à cette question. Simple et facile.Merci beaucoup. –

Questions connexes