43 votes

Programme Compatibility Assistant pense que mon application est un installateur

J'ai créé un .NET, C#, WinForms application sur Win 7 RTM x64, qui disons que j'ai appelé DataInstaller.

Lorsque j'exécute ce programme à l'extérieur du débogueur (juste un formulaire vide avec aucune fonctionnalité à l'heure actuelle), il fonctionne très bien jusqu'à ce que je ferme le formulaire. Ensuite, je reçois un message de l'Assistant Compatibilité des programmes qui dit:

Ce programme ne pourrait pas installé correctement

J'ai ensuite obtenir la possibilité de les réinstaller en utilisant les paramètres recommandés ou de dire que l'installation a fonctionné comme prévu.

Si j'ai le nom de l'app 'DataThingy" ce n'est pas un problème, je suppose que c'est lié à la façon dont les programmes appelés *le programme d'Installation de gain d'un contrôle de compte d'utilisateur icône en forme de bouclier.

Je suppose qu'il y aura quelque chose de simple que je peux mettre dans le manifeste de l'application pour éviter cela?

Je ne suis pas sûr si cela se produit sur Vista car je n'ai pas accès actuellement.

Changer le nom n'est pas une option et la désactivation de l'UAC n'est pas une option, de sorte s'il vous plaît ne le conseille pas!

Edit:

OMG.

Il semble que si les conditions suivantes sont remplies, l'UAC bâtons sa rame en:

Exe le nom contient le mot de l'Installateur

AssemblyInfo.cs

AssemblyTitle contains the word 'Installer'
    e.g. [assembly: AssemblyTitle("DataInstaller")]
AssemblyProduct contains the word 'Installer'
    e.g. [assembly: AssemblyProduct("Data Installation Utility")]

"Programme d'installation" peut aussi être "Setup".

Il est incroyable, vraiment. Évidemment, l'un des anciens programmeurs VB6 a été relocalisé dans le contrôle de compte d'utilisateur équipe, à Redmond.

J'ai encore besoin d'une solution de contournement, je ne suis pas prêt à accepter que ma demande ne peut pas être appelé un installateur car il ne touche pas la base de registre ou mettre les fichiers dans le dossier Program Files.

Je suppose que le contrôle de compte d'utilisateur serait de mettre la machine sur le total de verrouillage si j'ai essayé d'exécuter mon application appelée IAmAVirus.exe. (En fait, je n'ose pas essayer car je ne suis pas entièrement convaincu que je vais être ridicule)

43voto

Justin Points 306

Ajoutez ceci dans votre manifeste.

 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">

  <application>

    <!--The ID below indicates application support for Windows Vista -->

      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>

    <!--The ID below indicates application support for Windows 7 -->

      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>

  </application>

</compatibility>
 

3voto

EKS Points 2540

Comme Workshop, Alex devinera en se basant sur les noms de fichiers.

Mais avez-vous essayé d'ajouter un fichier manifeste? Cela vous permet de spécifier les droits d'accès nécessaires à l'exécution de l'application.

MSDN sur la façon de créer un à partir Visual Studio Un autre article de lien qui aide .

2voto

Kevin DiTraglia Points 9303

Je viens d'avoir ce problème et j'ai fini par le résoudre en m'assurant que le titre de l'assembly dans le fichier AssemblyInfo.cs et le nom d'assembly de mon fichier cs.proj correspondaient. Quand ils n'étaient pas synchronisés, cette erreur était générée, ce qui les rendait la même chose, ce qui la faisait disparaître. Vous ne savez pas vraiment si cela s'applique à votre situation, mais une erreur identique, dans des circonstances similaires, vaut peut-être la peine d'essayer et d'éviter la réponse acceptée en ignorant l'erreur ensemble.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X