11
votes

Comment obtenir le nom actuel des utilisateurs dans une action personnalisée pour Windows Installer?

J'ai besoin d'obtenir le nom d'utilisateur de l'utilisateur exécutant l'installateur de mon action d'installation personnalisée. Parce que le programme d'installation obtient des privilèges spéciaux, Environnement.Username donne simplement un "système".

Environnement.SpecialFolders.ApplicationData Renvoie le dossier d'utilisateurs actuels Appdata, mais je ne peux pas creuser de manière fiable le nom d'utilisateur de celui-ci.

Plus de cas Spécifications:

Utilisation d'un projet de configuration Visual Studio 2008 L'action personnalisée est une classe d'installation exécutée après l'installation et est la seule dans le projet.


2 commentaires

Pouvez-vous donner plus d'informations? Utilisez-vous un projet d'installation? Bâtiment basé sur Wix? Pouvez-vous ajouter où (séquence, position) vous planifiez votre action personnalisée? Est-ce qu'il courcule différé? Immédiat?


J'ai ajouté un peu plus de détails à la question. Je n'ai pas touché Wix. À peu près sûr qu'il est immédiat.


5 Réponses :


2
votes

Utilisez WindowIdentity.getCurrent (). Nom de l'espace de noms System.Security.Prinipipal. Cela inclura également la partie de domaine, donc si vous n'avez pas besoin d'ajouter une scission à la fin de celui-ci. Windowsity.getCurrent (). Nom.split ('') [1].

using System.Security.Principal;

this.nametext = WindowsIdentity.GetCurrent().Name.Split('')[1];


2 commentaires

Il y avait d'autres réponses qui lui ont suggéré aussi, mais semblent avoir été supprimées. Cela ne renvoie pas le nom des utilisateurs à Vista, il renvoie toujours le système


Jetez un coup d'œil à ce post. Stackoverflow.com/Questtions/400872/... < / a>. C'est plus sur la validation mais cela pourrait être utile.



2
votes

Tout d'abord, assurez-vous d'avoir le Bit Impersonate < / a> défini sur OFF. Voici comment .

Malheureusement, il n'y a pas de moyen de Définir directement ce drapeau pour une coutume Action dans l'interface utilisateur pour le projet d'installation dans l'IDE Visual Studio. En valeur visuelle Studio 2005, vous pouvez utiliser un post-construction étape qui modifie le MSI pour définir cette Bit en utilisant une stratégie précédemment décrit dans ce Publication du blog .

Deuxièmement, je suppose que vous courez Vista parce que les gens semblent avoir ce problème avec Vista et que quelqu'un a posé cette question sur MSDN et sa solution consistait à suivre le blog post lié ici .

Poste de blog de Robert Flaming sur UAC dans MSI Notes: le Noumersonate Bit Erreur donne également un aperçu de ces problèmes.


2 commentaires

Droite, j'ai déjà le bit d'impersonate éteint. J'ai examiné le blog qui a répondu à la question du MSDN et j'ai essayé la solution manifeste, mais cela ne semble rien avoir changé. Je viens de copier le manifeste du blog et je l'ai sauvé comme setup.exe.manifest


Désolé mais je n'ai plus d'info guichet automatique



2
votes

Je n'ai jamais touché à des projets de configuration contre VS (joué avec Wix et peut le recommander). En regardant votre problème, il semble que votre CA fonctionne différé (et avec des privilèges élevés).

Recherche sur le NET pour les projets de configuration de VS, j'ai rencontré un long article 1 qui contenait ce paragraphe (recherche de" différé "):

En d'autres termes, la conception Visual Studio vous limite à des actions personnalisées appelées lorsque vos fichiers sont sur le système (actions personnalisées différées), ce qui signifie que vous devez utiliser la propriété CustomActionData. D'autres outils générant des fichiers MSI sont souvent plus flexibles, donc si vous prévoyez d'anticiper les configurations complexes, étudiez ces outils.

1: http://www.simple-talk.com/dotnet/visual-studio/visual-studio-setup---projects-and-custom-actions/


0 commentaires

9
votes

Vous pouvez obtenir des informations sur les variables d'environnement. J'utilise

environnement.getenvironmentvariable ("nom d'utilisateur");

Pour obtenir le nom d'utilisateur actuel.


2 commentaires

Cette réponse a fonctionné pour moi - il renvoie l'utilisateur connecté et non l'utilisateur d'installateur élevé de l'action personnalisée.


J'obtiens également le domaine en utilisant cette méthode: Environnement.getenvironmentVariable ("userdomain") + "\\" + environnement.getenvironmentvariable ("nom d'utilisateur")