Visual Studio Installer: Obtenir Le Répertoire Cible
J'ai fouiné partout sur Google en essayant de trouver le moyen le plus approprié pour déterminer le chemin d'installation est sélectionné par un utilisateur de l'assistant d'installation.
Fondamentalement, je suis en cours d'exécution dans un problème où mon service ne peut pas créer des fichiers dans son propre répertoire, car il lui manque les autorisations appropriées. Je suis en supposant que la bonne façon de résoudre ce problème consiste à s'assurer que ce que compte le service de l'aide est donnée de fichier approprié des autorisations sur ce dossier.
Mais avant que je puisse même s'attaquer à la façon de définir des autorisations à travers .Net, j'ai besoin de savoir le dossier d'installation. Je suis en utilisant une installation de projet qui dispose d'une classe du programme d'installation qui contient un ServiceInstaller
de contrôle. Les deux ont la Context
bien j'ai donc été vérifier que les paramètres qui sont disponibles lorsque le AfterInstall événement se déclenche pour chacun des installateurs. J'ai d'abord pensé que je verrais le TargetDir
bien défini, mais qui n'a pas été le cas. Je suis cependant de voir AssemblyPath
ensemble et en pointant vers le fichier exécutable de le dossier approprié.
Essentiellement, je veux juste m'assurer que c'est la méthode la plus appropriée, je devrais être à l'aide de:
private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
string InstallPath = System.IO.Path.GetDirectoryName(serviceInstaller1.Context.Parameters["AssemblyPath"]);;
}
OriginalL'auteur Spencer Ruport | 2010-02-18
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé que la solution que Berg a donné fonctionne pour moi, sauf en utilisant cette valeur pour la propriété CustomActionData:
Notez l'ajout de la barre oblique inverse. Voir ce article sur MSDN.
Où en êtes-vous à l'aide de ce morceau de texte? Votre explication n'est pas très clair pour moi, désolé. Comme argument de ligne de commande pour le projet? Quelque part dans le code? Le lien pour MSDN est cassé maintenant, trop. Merci Microsoft! 🙂
Oh, je vois maintenant. J'ai trouvé la réponse dans un autre post: "Dans votre projet de déploiement, ajouter une Action Personnalisée pour Installer et de s'Engager. Pour la propriété CustomActionData pour l'Installation d'une action personnalisée, entrez /Targetdir="[TARGETDIR]\" "
OriginalL'auteur YWE
Votre action personnalisée est une différés action personnalisée et seulement certaines propriétés sont disponibles, voir la page suivante pour plus de détails, http://msdn.microsoft.com/en-us/library/aa370543(SV.85).aspx. Vous pouvez être en mesure d'ajouter le TARGETDIR propriété de la CustomActionData dans Visual Studio 2008; cependant, je n'ai pas travaillé avec Visual Studio 2008 comme un outil de création.
Faire compliqué installe dans Visual Studio 2008 est très difficile car les résumés à l'écart d'un certain nombre de fonctionnalités clés de MSI. Je suggère fortement de prendre un coup d'oeil à WiX.
Même si vous n'utilisez pas WiX, vous pouvez télécharger Orca, http://msdn.microsoft.com/en-us/library/aa370557(SV.85).aspx et de l'utiliser pour valider votre installation. Cela permettra d'économiser de nombreuses heures plus tard.
Oui WiX est capable d'installer les services. Vous avez juste besoin de l'auteur de la ServiceInstall Élément, wix.sourceforge.net/manual-wix2/wix_xsd_serviceinstall.htm. WiX et installation de Visual Studio 2008 projets sont à la fois juste avant extrémités pour MSI. Si vous décidez d'aller avec WiX je suggère la lecture, msdn.microsoft.com/en-us/library/aa370566(SV.85).aspx et de tous les sous-entrées. Il vous aidera à comprendre les composants et les fonctionnalités. J'ai d'abord commencé à l'aide de Visual Studio 2003\2005 pour de notre installe et viens de croiser trop de limitations.
J'ai eu à coller avec une installation de Visual Studio projet pour ce projet, mais +1 pour me donner une alternative viable à la recherche dans l'avenir. 🙂
OriginalL'auteur LanceSc
Au cours de l'installation, de l'événement j'ai fait ceci:
ensuite, j'ai été en mesure d'accéder à
TargetDir
plus tard au cours deOnCommitted
:Pas sûr si cela aide ou pas! Je suis à essayer de comprendre comment déterminer de manière fiable le répertoire d'installation de sorte que mon service peut faire l'abattage.
OriginalL'auteur Evan
Pour ceux qui ont plusieurs auront à faire comme ce
OriginalL'auteur Chief
Comme une alternative à des projets d'installation, vous pouvez utiliser un programme d'installation des services de construction. Je pense que, avec http://installer.codeeffects.com vous pouvez charger des fichiers à partir de votre site web et de les mettre dans le répertoire d'installation lorsque l'utilisateur installe votre service. Espérons que cette aide.
OriginalL'auteur Regina
Pour obtenir le répertoire cible de la valeur de la propriété dans votre action personnalisée, vous pouvez le transférer manuellement en sélectionnant votre action personnalisée de sortie dans l'action personnalisée d'afficher et de mettre quelque chose comme:
que la valeur de la propriété CustomActionData.
Vous devriez alors être en mesure d'y accéder par:
OriginalL'auteur Berg
Aussi loin que je peux dire que c'est la seule façon de déterminer le répertoire d'installation. Bien sûr, je vais prendre note si quelqu'un vient avec une réponse différente mais jusqu'alors, c'est l'approche que je vais prendre.
OriginalL'auteur Spencer Ruport