2010-03-10 14 views
7

J'écris un programme d'installation NSIS et le programme d'installation élève "en tant qu'administrateur" sur Windows 7/Vista. J'ai besoin d'exécuter le programme installé à la fin de l'installation et je ne veux pas le lancer avec les mêmes privilèges que le programme d'installation.Comment lancer un programme en tant qu'utilisateur normal à partir d'un programme d'installation surélevé UAC

Les commandes exec régulières de NSIS exécutent le processus enfant avec les mêmes autorisations que le programme d'installation.

Il existe un plugin UAC pour NSIS, mais la documentation n'est pas très bonne et il semble v. Je préférerais ne pas utiliser ce plugin.

Idéalement, je cherche un petit .exe que je peux inclure qui lancera le programme cible sans élévation de l'UAC. Est-ce que cela existe?

D'autres suggestions?

Merci!

Répondre

4

Vous avez seulement deux options:

  • Décocher et enlever la case d'exécution (Lors de l'exécution sur NT6 +)
  • Utilisez le plug-in UAC (User Ce n'est pas nouveau, mais il est une douleur à utilisez, donc je vous suggère de passer à la première option)

Il n'y a pas de programme externe que vous pouvez utiliser puisqu'il est impossible de revenir à l'utilisateur d'origine à partir d'un processus élevé (Vous pouvez essayer, et obtenir assez proche, mais ça ne g et l'utilisateur correct dans tous les cas)

+2

L'option 1 est ce que nous avions choisi mais ce n'est pas "idéal". Microsoft a-t-il rendu impossible l'exécution d'un processus "dé-élevé"? Il semble absurde de ne pas avoir d'API pour ça. Je ne connais pas bien NSIS et je ne le connais pas très bien, donc je ne suis pas tout à fait sûr comment UAC va interagir avec le script MultiUser.nsh.C'est donc une autre complication que je ne voudrais pas traiter avec –

+3

@KZ: Oui, il est impossible de lancer un processus non surélevé à partir d'un processus surélevé, la seule solution consiste à commencer par un processus non élevé, à lancer votre processus surélevé et à faire en sorte que le processus élevé communique Je l'utilise depuis de nombreux mois sans problème –

+0

Très bien alors, donc revenons aux options 1 et 2. Je suppose que je vais passer à l'intégration. le plugin UAC pour une construction plus tard Merci pour l'aide! –

0

J'ai trouvé ce qui suit, ce qui pourrait être wrappered dans aa simple utilitaire de ligne de commande:

http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part-2-how/

Il n'a fallu environ une heure pour obtenir ce code de travail pour mon projet, et cela fonctionne parfaitement jusqu'à présent. ;)

+0

Et si l'utilisateur exécutant le programme d'installation (RunAs/Secondary Logon) n'est pas le même que l'utilisateur de connexion/explorateur shell? Il n'y a tout simplement pas moyen de redescendre dans tous les cas! – Anders

+0

Pourquoi pourquoi MS n'a pas donné une méthode directe pour faire ça?! Bizarre! Comme cela fonctionnera dans le cas typique (utilisateur final exécutant notre programme d'installation en mode privilèges élevés), cela fonctionnera pour nous. Mais, soupire ... – Mordachai