2010-11-09 7 views
22

Je remarqué le phénomène suivant:Comment éviter l'UAC lorsque mon nom de fichier EXE contient le mot "update"?

Un exécutable construit avec Delphi 7 et une partie du nom, y compris « Mise à jour » (par exemple « UpdateMyApp.exe ») provoque l'UAC à l'étape pour afficher un avertissement comme « voulez-vous permettre au programme d'apporter des modifications à votre ordinateur ". Cela se produit avec une simple application hello world. L'affichage du fichier dans l'explorateur montre le symbole de bouclier superposé à l'icône de l'application.

Dès que vous renommez l'exe, l'écran disparaît et l'application démarre sans avertissement.

Comme mentionné cela se produit uniquement pour les programmes construits avec Delphi 7 et démarrés sur Windows 7 (je suppose même sur Vista), mais pas par ex. WinXP.

Une vérification rapide avec Delphi 2007 montre que ce problème a disparu.

drôle ... scarying ...

En plus de renommer le fichier, que puis-je faire pour empêcher cela?

Répondre

43

Ce problème est dû au fait que les applications générées avec Delphi 7 par défaut n'ont pas de manifeste ou n'en possèdent pas, sans attribut requestedExecutionLevel. En raison de que Windows pense que vous avez besoin d'un accès administrateur lorsque le nom de votre application contient des mots comme Setup ou Update. Ce processus est appelé Installer Detection Technology et a été introduit aux côtés de l'UAC avec Windows Vista.

À partir du site MSDN:

détection d'installation applique uniquement:

  1. 32 executables bits

  2. Applications sans requestedExecutionLevel

  3. processus interactifs en cours d'exécution en tant que Utilisateur standard avec LUA activé

Avant un 32 processus de bits est créé, les attributs suivants sont vérifiés pour déterminer si elle est un installateur:

  • Nom du fichier comprend des mots clés comme "installer", "setup", " mise à jour, etc.
  • Mots-clés dans les champs de gestion des versions suivants: Fournisseur, Nom de la société, nom du produit, fichier Description, nom de fichier d'origine, Nom interne et nom d'exportation.
  • Mots-clés du manifeste côte à côte intégrés dans l'exécutable.
  • Mots-clés dans des entrées StringTable spécifiques liées dans l'exécutable.
  • Attributs de clé dans les données RC liées dans l'exécutable.
  • Séquences ciblées d'octets dans l'exécutable.

De plus Delphi 2007 par défaut comprennent un manifeste dans vos applications avec la clé requestedExecutionLevel.

Ceci est un exemple manisfest créé par Delphi 2007. Vous pouvez voir que ce manifeste a l'attribut requestedExecutionLevel dans le contenu.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
    type="win32" 
    name="CodeGear RAD Studio" 
    version="11.0.2902.10471" 
    processorArchitecture="*"/> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
     type="win32" 
     name="Microsoft.Windows.Common-Controls" 
     version="6.0.0.0" 
     publicKeyToken="6595b64144ccf1df" 
     language="*" 
     processorArchitecture="*"/> 
    </dependentAssembly> 
    </dependency> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel 
      level="asInvoker" 
      uiAccess="false"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 
+0

Rob, merci beaucoup pour cette info utile. Chris – Christian

+0

cela explique pourquoi cela arrive, mais pas comment le résoudre – Youda008

+0

Oui c'est le cas. Incluez un manifeste vous-même. Si vous utilisez Delphi 7, vous devrez compiler le manifeste dans un fichier .RES en utilisant un fichier source .RC, et RC.exe pour le compiler, puis le lier en utilisant '{$ R MyManifest.res}' - Versions ultérieures de Delphi comme XE et au-delà incluent le droit de soutien dans l'IDE pour sélectionner votre propre fichier .manifest –

Questions connexes