Entwickler-Ecke

Sonstiges (Delphi) - WinExec funktioniert nicht mehr


jasocul - Fr 21.04.06 21:47
Titel: WinExec funktioniert nicht mehr
Endlich ist es soweit.
Seit Jahren ist WinExec von MS als obsolet beschrieben. Jetzt funktioniert es tatsächlich nicht mehr.
Ich habe kürzlich einen Rechner installiert mit aktuellen XP-Pro.
Dann wollte ich ein altes Programm von mir starten und bekam ein allgemeine Schutzverletzung. Da das Programm nichts anderes macht, als ein anderes Programm zu starten, war ziemlich schnell klar, woran es lag. Das Programm benutzte immer noch WinExec.
Ich habe schnell auf ShellExecute umgestellt und schon war alles klar.

Also, wer noch alte Programme mit WinExec hat: Bei aktuellem XP-Pro laufen die nicht mehr!


AXMD - Sa 22.04.06 00:02

Also bei mir funktioniert WinExec... :? Hab auch XP Pro (SP2)...

AXMD


Ydobon - Sa 22.04.06 00:10

Und MSDN gibt als Voraussetzung sogar noch Vista an. Der Fehler dürfte also woanders liegen, zumal nicht einmal MS es fertig bringen würde nach dem Wegfall einer Funktion Schutzverletzungen zu produzieren.


Delete - Sa 22.04.06 00:21

Eine fehlendende, statisch gelinkte API Funktion würde schon beim Kompilieren die Fehlermeldung "Prozedureinstrungspunkt in DLL nicht gefunden" auslösen. Und WinExec wird bestimmt statisch gelinkt. Es wird eher daranliegen, dass WinExec für 16-Bit Progarmme gedacht ist und etwas intern macht, womit das aufrufende Programm oder aufzurufende Programm nicht klar kommt.


Ydobon - Sa 22.04.06 00:24

Dann würde ich doch als OS-Entwickler wenigstens eine Art Dummy hinterlassen, um eben so etwas zu verhindern.


Delete - Sa 22.04.06 00:32

Und was soll der Dummy machen? Nichts? Was hätte der Entwickler bzw. der Benutzer davon? Es würde nur große Rätsel aufgeben, warum nichts passiert. Eine meldung ausgeben? Das passiert ja schon, so wohl beim Entwickeln, als auch später beim Benutzer, wenn es auf einem Betriebssystem läuft, auf dem es diese Funktion nicht gibt. Siehe dazu auch diese Funktion, um dem OS vorzugaukeln, dass das Programm als Bildschirmschoner läuft.


Ydobon - Sa 22.04.06 00:41

Stimmt auch wieder. Nur so etwas absichtlich in einem Programm zu provozieren, würde mich schon etwas schütteln, dass muss doch sanfter gehen.


Delete - Sa 22.04.06 00:42

Gerade gefunden: http://blogs.msdn.com/oldnewthing/archive/2005/10/26/485133.aspx

Gleiches Problem nur mit Icons und Animationen in System DLLs.


jasocul - Sa 22.04.06 07:31

Auf allen Rechnern die schon länger XP-Pro haben (immer aktuelle Updates und Patches enthalten), funbktionert es auch. Nur bei wirklich neu installierten nicht mehr.
Da es sich im Firmen-PCs handelt, ist die Konfiguration ansonsten natürlich die selbe. Außer dem OS gibts kein Unterschied.


Delete - Sa 22.04.06 13:54

Wie gesagt, es muss an etwas anderem liegen, da eine fehlende API Funktion obige Fehlermeldung auslöst.


jasocul - Sa 22.04.06 14:25

Beim Compilieren bekomme ich keine Fehlermeldung. Allerdings läuft es bei dem PC, auf dem compiliert wird auch. Wenn natürlich mit den neueren Builds von XP-Pro die API-Funktion fehlt, kommt der Fehler logischerweise erst zur Laufzeit.
Womit meine Behauptung, dass WinExec mit aktuellem XP-Pro nicht mehr funktioniert, trotzdem stimmen würde.


AXMD - Sa 22.04.06 14:29

user profile iconjasocul hat folgendes geschrieben:
Womit meine Behauptung, dass WinExec mit aktuellem XP-Pro nicht mehr funktioniert, trotzdem stimmen würde.


Nein, wie Ydobon richtig schreibt:

Zitat:
zumal nicht einmal MS es fertig bringen würde nach dem Wegfall einer Funktion Schutzverletzungen zu produzieren.


Die Fehlermeldung wäre eine andere (Prozedureinsprungpunkt WinExec in bla.dll nicht gefunden)

AXMD


jasocul - Sa 22.04.06 14:37

Dann frage ich mich aber ernsthaft, woran das liegen kann. In dem Programm habe ich wirklich nur WinExec durch ShellExecute ausgetauscht (und die ShellAPI-Unit eingebunden). Danach lief alles fehlerfrei.
Oder muss ich langsam an meinem Verstand zweifeln? :gruebel:


Delete - Sa 22.04.06 14:37

Kompilier das http://www.delphi-forum.de/viewtopic.php?t=58334&highlight=prozess+verstecken mal auf eine Win9x Rechner, führe es unter Windows XP aus und guck, was passiert.


jasocul - Sa 22.04.06 14:42

Ich habe seit ein paar Jahren keinen Win9x-Rechner mehr. Wird also schwierig. Ich weiß aber, worauf du hinaus willst. Die eingebundene DLL-Funktion ist ebenfalls von einem XP-Pro-Rechner. Allerdings ein ältere Version mit allen Updates.
Wenn ich nächste Woche die Zeit dazu finde, werde ich eine Test-Applikation basteln. Vielleicht lässt sich dann die Ursache ermitteln.