2009-06-17 2 views
2

Konfiguration: Windows Server 2008 x64.XXX.exe ist keine gültige Win32-Anwendung

Software ist Cross-Plattform-C++ 64bit.

Der bisherige Installateur vorbelegt den Benutzer zu fragen, zu

c zu installieren: \ Program Files (x86) \ Unternehmen \ Version

Für die letzte Version, die ich das Installationsprogramm mit einem Wegüberlagerung geändert zu installieren

c: \ Programme \ Unternehmen \ Version

die Jungs, die Tests für uns tut, sagte, dass mit der neuen c installieren: \ Programme \ Teilprozesse werden nicht gestartet. Überschreiben Sie die Installation in c: \ Programme (x86) \ xxx, alles läuft gut. Das Wechseln zu cmd.exe und Ausführen von C: \ Programme \ xxx gibt den Fehler "yyy.exe ist keine gültige Win32-Anwendung". Auch dies ist kein Problem mit c: \ Programme (x86).

Ein Kunde wird auch an den Standardstandort installiert und erhält die gleichen Fehler.

Meine Build/dev Maschine zeigt keinen dieser Fehler. Es läuft eine Demo-Version von Server 2008 (und Visual Studio Express), die niemals aktualisiert und nie neu gestartet wird.

Gibt es etwas Besonderes an dem "x86", das an die Programmdateien angeheftet ist?

HINWEIS:

Dies ist kein Problem auf meiner dev Maschine, die auch Server 2008 x86_64 ist.

dumbin/Header zeigt deutlich an, dass diese Programme 64bit sind.

An dieser Stelle gibt es keine Antwort. Problemumgehung ist, einfach zu Programmdateien (x86) oder anderswo zu installieren und damit fertig zu sein. Ich werde eine FAQ einreichen, die Benutzer NICHT in Programmdateien installieren dürfen (sie werden sich eine FAQ anschauen, wenn das Zeug nuklear wird).

Dies könnte ein Problem mit dem Installer sein, es könnte ein klassischer Fall von "quack.exe" sein, aber auf "Programme" angewendet werden. Es gibt einen guten Grund, warum ich Fenster im Allgemeinen hasse.

+0

xxx.exe - hmm - welche Art von ausführbaren Datei machen Sie? gahooa

+0

Versuchen Sie, die Exe an der falschen Stelle mit der Abhängigkeitsanzeige zu überprüfen. Sollte Ihnen sagen, welche DLLs nicht verfügbar sind. Versuchen Sie außerdem, den Prozess während des Starts mithilfe von procmon oder so zu überwachen, und sehen Sie, was zur Laufzeit fehlschlägt. Das sollte Ihnen eine bessere Vorstellung davon geben, was fehlt. – eran

+0

Benutzer führen das Programm von cmd.exe Der Fehler ist ein Dialogfeld mit dem oben genannten. Was mich anpisst, ist, dass ich diesen Fehler nicht alleine reproduzieren kann. Ich habe gerade auf sp2 und später aktualisiert. – Brian

Antwort

0

Ich denke, das ist mit dem Manifest der Anwendung verbunden. Hast du das irgendwie geändert? Ich habe den gleichen Fehler bekommen, als ich zwischen Compilern hin- und herwechseln musste. vc9 (vs2008) hat ein Manifest erstellt, das wir normalerweise bei der Kompilierung von .net 2003 nicht verwenden.

+0

Es gibt kein Manifest mit dieser Anwendung. Ich benutze msvc9 (mit Express 2008), Cygwin, Marmelade, Fltk, PCRE, Gdal und JPEG Bibliotheken alle statisch miteinander verbunden. – Brian

+0

Ich weiß nicht über Express, aber mit VS2008 Pro erhalten Sie standardmäßig ein automatisch generiertes Manifest. –

+0

Und um genau zu sein, ist dieses Manifest in die ausführbare Datei eingebettet. – MSalters

4

Im Verzeichnis Programme (x86) befinden sich 32-Bit-Programme. Wenn eine 32-Bit-Anwendung ausgeführt wird, ist die Umgebungsvariable% ProgramFiles% set zu C: \ Program Files (x86) \ (standardmäßig könnte sich das tatsächlich auf einem anderen Laufwerk befinden).

Sind Sie absolut sicher, dass dieses Programm als 64-Bit kompiliert wird?

+0

Absolut 64bit. Dies ist ein leistungsstarker Produktprozessor für große Datenmengen, und ich kann jedem Prozess klar zusehen, wie der gesamte Ram und der virtuelle Speicher ausgelastet sind. – Brian

+0

Außerdem muss ich zwei separate Build-Umgebungen pflegen. Ein paar Utility-Anwendungen werden zusammengestellt und den Partnern als 32bit gegeben. Es ist ein ernster Schmerz, die Build-Umgebung von 64 Bit auf 32 Bit umzustellen. 32bit aps werden immer als * .x86_32.exe bezeichnet. – Brian

+1

Hmm ... Nach dem Standard-Installationspfad zu urteilen, ist das Installationsprogramm 32-Bit. Vielleicht verursacht das ein paar Probleme? Es gibt einige andere Dateisystemumleitungen (z. B. System32 wird für system64 für 32-Bit-Anwendungen umgeleitet) und Registrierungsumleitungen (HKEY_LOCAL_MACHINE \ SOFTWARE \). – Powerlord

1

Vielleicht findet die EXE eine DLL in einem 32-Bit irgendwie in dieser bestimmten Konfiguration? Z.B. als es sb gelang, sein 64-bit-dir mit 32-bit-dlls zu vermasseln.

Denken Sie daran, dass nicht geladene DLLs beim Start geladen werden.