2017-10-12 2 views
-1

Nous avons un ancien produit win32 que certains clients veulent toujours utiliser dans Windows 10, mais dans certains cas plusieurs de ses composants (Win32 exécutables) produire ledit message lors de l'exécution, lors de l'installation et après l'installation:Comment ajuster un exécutable pour qu'il arrête d'émettre "permettre à ce programme d'apporter des modifications" dans Windows 10

"Voulez-vous permettre à cette application/programme d'apporter des modifications dans votre PC".

Existe-t-il une documentation de ce que Windows vérifie pour émettre le message?

+0

Sonne comme UAC et la virtualisation des applications. Mais peut-être avez-vous besoin de comprendre votre programme. Si vous ne le faites pas, quelle chance avons-nous? –

Répondre

2

Le message que vous voyez est l'invite UAC, et il apparaît parce que Windows pense que le programme veut des privilèges d'administrateur.

Les anciens programmes n'ont pas de manifeste. Les versions modernes de Windows supposent si les anciens programmes nécessitent des privilèges d'administrateur. Si le nom du programme semble être un programme d'installation (par exemple, setupfoo.exe), il suppose que le programme a besoin d'un administrateur. Mais beaucoup de vieux programmes, même s'ils ne sont pas des installateurs, veulent souvent des privilèges d'administrateur parce qu'ils essaient souvent de sauvegarder des fichiers dans le répertoire d'installation du programme ou de modifier les valeurs de registre à l'échelle de l'ordinateur. Si Windows détecte un programme essayant de le faire et échouant parce qu'il n'a pas de privilèges d'administration, il peut ajuster les options de compatibilité du programme pour que la prochaine fois il fonctionne en tant qu'administrateur. Pour vérifier cela, cliquez avec le bouton droit sur le fichier exécutable, choisissez Propriétés et sélectionnez l'onglet Compatibilité. Vous y trouverez une case à cocher nommée "Exécuter ce programme en tant qu'administrateur". Pour vérifier si votre programme a un manifeste, ouvrez le fichier .EXE dans Visual Studio (avec la commande de fichier ouvert habituelle) ou un autre outil de visualisation de ressources/éditeur, et regardez dans les ressources pour voir s'il a RT_MANIFEST Ressource.

S'il n'y a pas de manifeste et que le programme se comporte correctement, vous pouvez en ajouter un qui définit le nœud <requestedExecutionLevel> sur asInvoker.

S'il a un manifeste, regardez le nœud <requestedExecutionLevel> dans le fichier XML. Si c'est là et il est dit requiresAdministrator, alors il n'y a probablement rien que vous puissiez faire. Si cela dit déjà asInvoker, alors quelque chose d'autre ne va pas.

Pour fournir ou remplacer le manifeste, vous avez deux options. Vous pouvez créer un fichier manifeste externe et le placer dans le même dossier que l'exécutable (pour certaines versions de Windows, vous devez également demander à Windows de s'appuyer sur le manifeste externe en modifiant une valeur de registre). Vous pouvez également utiliser l'outil de manifeste (mt.exe fourni avec Visual Studio) pour incorporer un manifeste approprié dans l'exécutable lui-même (faites d'abord une sauvegarde de l'exécutable!). Dans les deux cas, vous souhaitez définir le nœud <requestedExecutionLevel> sur asInvoker pour éviter l'invite UAC. Notez que si le programme a réellement besoin de droits d'administration, alors fournir un manifeste indiquant que cela n'entraînera pas l'échec du programme pour certaines opérations. Le programme peut tomber en panne, ou il peut sembler fonctionner mais ne pas faire quelque chose d'important en silence (comme sauvegarder votre travail).

Notez également que les manifestes contrôlent d'autres choses importantes que vous devez corriger, comme marquer si l'application est compatible DPI ou quelles versions Windows elle prend en charge. Donc, si vous essayez d'ajouter un manifeste juste pour ajouter asInvoker, vous devrez peut-être ajouter d'autres valeurs importantes. MSDN a beaucoup de documentation sur les manifestes et l'outil manifeste.

+0

Au lieu de "pas de manifeste?, Supposons que le programme a besoin de privilèges d'administration" Je pense que vous vouliez dire que le programme n'a pas besoin de privilèges. –

+4

"* L'heuristique de Windows est: pas de manifeste?, Supposons que le programme a besoin de privilèges d'administration *" - ce n'est pas vrai. Seules ** certaines ** applications non manifestées sont supposées avoir besoin de privilèges. Ceci est géré par les heuristiques "Installer Detection" de l'UAC, car seuls les programmes d'installation hérités devraient avoir besoin de privilèges. Les non-installateurs ne bénéficient pas de privilèges par défaut. Voir [Présentation et configuration du contrôle de compte d'utilisateur] (https://technet.microsoft.com/fr-fr/library/cc709628.aspx) et [Architecture UAC] (https://technet.microsoft.com/fr-fr/ library/dd835540.aspx). L'ajout d'un manifeste UAC désactive la détection du programme d'installation. –

+0

Oui, vous avez raison. Il suppose admin s'il ressemble à un programme d'installation. Mais je pense qu'il y a aussi un shim de compatibilité qui peut donner un coup de pied s'il essayait de faire quelque chose qui nécessitait l'administration par le passé. Je vais modifier pour clarifier. –