Question

J'ai un CustomAction dans le cadre d'un MSI.

Il DOIT être exécuté en tant que compte de domaine qui est également membre du compte Administrateurs local.

Il ne peut pas utiliser l'indicateur NoImpersonate pour exécuter l'action personnalisée en tant qu'autorité NT \ System car il n'aura alors pas accès aux ressources réseau.

Sous Vista / 2008 avec le contrôle de compte d'utilisateur activé, si NoImpersonate est désactivé, il s'exécutera en tant qu'utilisateur exécutant, mais avec le jeton sans privilège et ne pourra pas accéder aux ressources locales telles que .installState. Voir l'architecture du contrôle de compte d'utilisateur

Quelqu'un sait-il qu'il est possible de

  • Forcer le MSI à s'exécuter avec le jeton élevé de la même manière que l'exécution à partir d'une invite de commande élevée?

  • Forcer le CustomAction à exécuter une exécution élevée (requireAdministrator dans manifest ne semble pas fonctionner)?

  • Déterminez si le contrôle de compte d'utilisateur est activé, s'il n'a pas été exécuté avec un niveau élevé et, le cas échéant, avertissez ou annulez l'installation?

Était-ce utile?

La solution

Répondre à ma propre question pour tout autre médiocre chercheur.

  • Vous ne pouvez pas ajouter de manifeste à un MSI. Vous pouvez ajouter un fichier SETUP.EXE ou un programme d'amorçage pour créer un shell dans le fichier MSI, ainsi que le manifeste associé à requireAdministrator, mais qui empêche l'utilisation d'un fichier MSI.

  • L'ajout d'un manifeste à une CustomAction ne fonctionne pas car il est exécuté à partir de msiexec.exe

Pour y remédier, réglez la MSIUSEREALADMINDETECTION sur 1 pour que la condition privilégiée fonctionne réellement et ajoute une condition de lancement pour Privileged qui donne un message d'erreur à propos de l'exécution via une invite de commande avec privilèges élevés, puis ferme l'installation.

Cela a l’effet secondaire heureux: lorsqu’un msi est exécuté à partir d’une invite de commande élevée, les CustomActions différées sont exécutées en tant qu’utilisateur actuel avec un jeton Administrateur complet (plutôt que un jeton d’utilisateur standard), quel que soit le Paramètre NoImpersonate .

Plus de détails - http: // www.microsoft.com/downloads/details.aspx?FamilyID=2cd92e43-6cda-478a-9e3b-4f831e899433

[Modifier] - J'ai mis ici un script qui vous permet d'ajouter la propriété MSIUSEREALADMINDETECTION. en tant que VS n'a pas la capacité de le faire et Orca est une douleur.

Autres conseils

requireAdministrator dans le manifeste devrait fonctionner.

Vous pouvez également utiliser un fichier .exe de bootloader pouvant utiliser ShellExecute avec " RUNAS " en tant que verbe (vous pouvez utiliser 7-zip pour créer le chargeur de démarrage, ou de nombreuses autres façons).

Vous pouvez créer un fichier archive sfx simple pour msi avec Winrar et les options suivantes:

  • onglet Configuration > Entrée après exécution : votre nom de fichier msi

  • onglet Avancé > Cochez la case d'option Demander l'accès administratif

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top