Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Keine Zulässige Win32-Anwendung seit Delphi11 (https://www.delphipraxis.net/209914-keine-zulaessige-win32-anwendung-seit-delphi11.html)

QuickAndDirty 7. Feb 2022 10:34


Keine Zulässige Win32-Anwendung seit Delphi11
 
Hallo
mit Delphi 10.4 konnte ich noch alle VCLServices und VCL Anwendungen auf Windows XP/ Windows Server2003 laufen lassen.
Jetzt seit Delphi 11 meldet Windows beim Start
von VCL und Consolen Anwendungen
"Keine Zulässige win-32 Anwendung"

Wohlgemerkt das meldet delphi bei einer reinen Consolen Anwendung mit einem Writeln einem Readln eingebunden.
Delphi 11 kann praktisch nicht mal ne leere Anwendung hervorbringen die auf Windows XP läuft.

Was muss ich mindestens tun um Delphi 11 Anwendungen auf Win XP lauffähig zu bekommen?
Patch ideen?
Delphi-Quellcode:
program TEST;

{$APPTYPE CONSOLE}


var rHelper:String;
begin
    Writeln('TEST');
    Readln(rHelper);
end.

EDIT:
Anscheinend hilft besseres googlefoo
https://en.delphipraxis.net/topic/55...ibility-tweak/

Wie hat der das rausbekommen? Ich weiß auch noch nicht ob es wirklich hilft.... melde mich wenn es funzt

Der schöne Günther 7. Feb 2022 10:41

AW: Keine Zulässige Win32-Anwendung seit Delphi11
 
Workaround hier:
https://quality.embarcadero.com/browse/RSP-35375

lxo 7. Feb 2022 10:49

AW: Keine Zulässige Win32-Anwendung seit Delphi11
 
Hallo das ist mir auch aufgefallen und da habe ich bereits etwas recherchiert, hier meine Erkenntnisse dazu:


Mit Delphi 11.0 Alexandria werden Windows Betriebssysteme älter als Windows 7 (SP1) nicht mehr unterstützt.
Dadurch können Anwendungen die mit Delphi 11.0 Alexandria erzeugt wurden auf Betriebssystemen wie z.B. Windows XP oder Windows Server 2003 nicht mehr ausgeführt werden.

Fehlermeldung: „***.exe ist keine zulässige Win32-Anwendung.“

Es gibt eine Möglichkeit um zuzulassen, dass die Anwendung trotzdem auf älteren Betriebssystemen ausgeführt werden kann.
Natürlich ist damit nicht versichert, dass die Anwendung zuverlässig auf einem System unter Windows 7 (SP1) läuft.
Wenn man im Projekt folgende Direktiven hinzufügt, kann die Anwendung auch mit Windows 2000 oder höher gestartet werden.

Delphi-Quellcode:
program Project1;

{$SETPEOSVERSION 5.0}     // <- Add    
{$SETPESUBSYSVERSION 5.0} // <- Add

uses

  ...

Weitere Infos dazu siehe:

https://quality.embarcadero.com/browse/RSP-35375
https://docwiki.embarcadero.com/RADS...SETPEOSVERSION
https://docwiki.embarcadero.com/RADS...ESUBSYSVERSION
https://docs.microsoft.com/de-de/win...ectedfrom=MSDN

QuickAndDirty 7. Feb 2022 11:16

AW: Keine Zulässige Win32-Anwendung seit Delphi11
 
Auf den ersten Blick ist es auch nicht notwendig Threading zu fixen, da Emba das schon berücksichtigt.

Delphi-Quellcode:
class function TThread.GetTickCount: Cardinal;
{$IF Defined(MSWINDOWS)}
begin
  Result := Winapi.Windows.GetTickCount;
end;
{$ELSE}
begin
  Result := Cardinal(GetTickCount64);
end;
{$ENDIF}

class function TThread.GetTickCount64: UInt64;
{$IF Defined(MSWINDOWS)}
begin
  if TOSVersion.Major >= 6 then Result := Winapi.Windows.GetTickCount64 else Result := Winapi.Windows.GetTickCount;
end;
{$ELSEIF Defined(MACOS)}
begin
  Result := AbsoluteToNanoseconds(mach_absolute_time) div 1000000;
end;
{$ELSEIF Defined(POSIX)}
var
  res: timespec;
begin
  clock_gettime(CLOCK_MONOTONIC, @res);
  Result := UInt64(1000 * res.tv_sec + res.tv_nsec div 1000000);
end;
{$ELSE OTHERPLATFORM}
  {$MESSAGE Fatal 'Method not implemented for Platform'}
{$ENDIF OTHERPLATFORM}

QuickAndDirty 7. Feb 2022 11:30

AW: Keine Zulässige Win32-Anwendung seit Delphi11
 
System.Threading muss nicht bearbeitet werden
Diese Anwendung , mit Delphi 11 kompiliert, geht auf Windows 10 und Windows XP ohne Fehler .

Delphi-Quellcode:
program IWSConsole;

{$SETPEOSVERSION 5.1}
{$SETPESUBSYSVERSION 5.1}
{$APPTYPE CONSOLE}

uses Winapi.Windows, System.Threading, System.Classes, System.Sysutils;
var rHelper:String;
    ticks:Cardinal;

begin
  try
    Writeln('TEST1');
    ticks := 0;
    ticks := Winapi.Windows.GetTickCount;
    Writeln(ticks);
    Writeln('TEST2');
    ticks := 0;
    ticks := TThread.getTickCount64;
    Writeln(ticks);
    Readln(rHelper);
  except
    On E:Exception do
    Begin
      exitcode := 1;
      raise Exception.Create(e.Message);
    End;
  end;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz