2017-08-15 11 views
-1

Je crée un programme d'installation pour un projet C#. Il nécessite une DLL C++ tierce non managée pour se connecter à un périphérique matériel. Lorsque je lance le projet à partir du débogueur, ou lorsque je clique avec le bouton droit de la souris -> Exécuter en tant qu'administrateur sur le programme installé, tout fonctionne normalement. Cependant, si je ne l'exécute pas en tant qu'administrateur, il se bloque. Alors, comment puis-je configurer l'installateur pour ne pas avoir besoin de droits d'administrateur pour fonctionner? Je sais que je peux définir le requestedExecutionLevel dans le app.manifest à requireAdministrator, mais je ne veux pas l'invite UAC à chaque fois, et je ne suis pas sûr que les machines de l'utilisateur final puissent exécuter n'importe quoi en tant qu'administrateur. Ma solution de contournement actuelle est de simplement l'installer directement sur le C: /, mais je voudrais l'installer dans le même répertoire Program Files que toutes les autres applications sont installées pour qui n'ont pas ce revers.Comment utiliser une DLL non managée dans le projet d'installation VS, mais sans que l'utilisateur ait besoin de droits d'administrateur?

+0

S'il vous plaît poser une question à la fois, pas deux questions sans rapport –

+0

Je ne suis pas sûr de ce que vous entendez par "d'autres applications qui n'ont pas cet échec". Tout programme d'installation qui s'installe dans Program Files génère une invite UAC. C'est le comportement prévu - si vous n'êtes pas un administrateur, vous n'avez pas à installer le logiciel dans Program Files. –

+0

J'ai supprimé l'autre question. Par "autres applications qui n'ont pas ce revers" je suppose que je voulais dire "d'autres applications qui n'ont pas de bibliothèques externes/applications qui ne demandent pas de droits d'administration" – zakparks31191

Répondre

3

Les utilisateurs limités ne peuvent pas contourner les restrictions de sécurité simplement parce qu'ils exécutent une installation. L'écriture dans le dossier ProgramFiles nécessite une élévation (comme le fait peut-être d'autres choses l'installation) donc il n'y a pas d'autre choix que d'élever l'installation - et il affichera une invite d'élévation UAC. Vous n'avez pas dit quel outil vous utilisez pour créer votre MSI, mais un MSI n'utilise pas de manifeste et (pour utiliser WiX comme exemple) l'élévation utilise l'élément Package InstallPrivileges.

L'utilisateur n'a pas besoin d'être administrateur car l'invite UAC permet à un administrateur de taper ses informations d'identification "par-dessus l'épaule" pour que l'installation fonctionne, si cela s'avère possible. Il existe également des options de déploiement gérées dans l'installation GPO de type entreprise, où l'utilisateur n'a pas besoin d'être élevé. Si l'appel MSI de votre code nécessite la création d'une action personnalisée que l'installation appelle, elle comporte une convention d'appel requise. Ensuite, vous pouvez appeler à partir de cela dans votre Dll C++ 3ème partie. Sans en savoir plus sur l'appel que vous voulez faire, il est difficile d'ajouter plus d'informations. L'appel est-il tôt dans l'installation (à partir de l'interface utilisateur peut-être)? Après l'installation? Est-ce une condition de l'installation? Pourrait-il être fait comme une vérification de la configuration dans l'application après l'installation?

+0

Cela a du sens. Je suppose que pour le contexte, c'est le premier projet d'installation de VS que j'ai jamais fait alors je n'étais pas sûr de certaines choses. L'invite de l'UAC ne s'afficherait-elle donc que lors du premier lancement? Avec le projet d'installation VS 2010 par défaut, il n'y a pas d'invite UAC lors du lancement du programme, il se lance et se bloque. – zakparks31191