2016-03-24 3 views
2

Semblable à this issue.IExpress.exe sous Windows 10 génère un fichier EXE incompatible avec Windows XP

J'utilise IExpress (fourni avec Windows) depuis des années pour emballer mes fichiers EXE Bootstrapper et MSI de l'application .NET dans un fichier d'installation auto-extractible. (Mon application est 32 bits, donc je l'ai utilisé la version de IExpress.exe dans %windir%/SysWOW64)

J'ai récemment déménagé à partir de Windows 8.1 à Windows 10.

Sans changer quoi que ce soit au sujet de mon code, en utilisant IExpress sur Windows 10 résulte un EXE qui ne fonctionnera pas sous Windows XP (obtenir "[FileName] .exe n'est pas une application Win32 valide").

En utilisant IExpress sous Windows 8.1, 8 ou 7, cela fonctionne correctement.

Quelqu'un peut-il faire la lumière ou fournir une solution?

(j'ai essayé de copier le IExpress.exe de Windows 8 (version de fichier 11.0.9600.17416) sous Windows 10 et l'utiliser à la place, mais la même chose se passe.)

+0

Je ne peux pas reproduire le problème sur mon Windows 10 (construction à partir de Windows 10% windir% \ SysWOW64). Avez-vous un exe reproducteur ou quelque chose qui aide? –

Répondre

3

Oui un autre rappel que XP est vraiment fini et fait avec. Quand je lance dumpbin.exe /headers sur le fichier EXE qui génère IExpress, je vois:

OPTIONAL HEADER VALUES 
     .... 
     10.00 operating system version 
     10.00 image version 
     6.00 subsystem version 
     .... 

Le numéro de version du sous-système est le premier show-bouchon, 6.00 est le numéro de version de Vista. Cela est corrigible, vous pouvez exécuter Editbin.exe pour le modifier avec l'option/SUBSYSTEM, XP est 5.01

Le système d'exploitation et la version de l'image est le plus gros problème, ne peut pas résoudre ce problème avec Editbin.exe. Je ne sais pas vraiment combien d'attention XP paie pour sa valeur, obtenir 10,00 est très nouveau. Je n'ai plus de machine avec XP, essayez-le.

La copie de l'ancienne version de IExpress.exe n'est pas suffisante. Il utilise c: \ windows \ syswow64 \ makecab.exe pour réellement faire le travail. Je vois une preuve rapide que c'est la source réelle du contenu de l'en-tête EXE. Ne copiez pas aveuglément ce fichier EXE dans le répertoire Windows, c'est trop risqué. Gardez-le séparé.

La bonne façon de faire est de garder une copie amorçable de XP, soit sur sa propre machine, soit sur une machine virtuelle. Vous en avez besoin de toute façon pour résoudre les problèmes des clients spécifiques à XP. Payer les tracas d'avoir toujours à supporter XP vers le client et ils ont tendance à faire la chose sage et nécessaire beaucoup plus rapidement. Je ne peux pas t'aider avec ça.

+0

Merci pour l'info - Je n'ai jamais entendu parler de dumpbin.exe. Force de changer la version du sous-système ne fonctionne pas malheureusement - je reçois plutôt le message "Le point d'entrée de la procédure _except_handler4_common n'a pas pu être situé dans la bibliothèque de liens dynamiques msvcrt.dll". Et essayer d'atténuer cette erreur cause encore plus de problèmes. Je pense que je vais devoir continuer à faire l'étape iexpress.exe de mon build sur Windows 8, et penser à tuer le support de XP pour une future version de mon application (ce que je tiens à faire de toute façon car le support de XP me retient retour à .NET 4.0). – Ross