none
VB6 - Windows 7 64-Bit: Problem mit API-Funktion CreateProcess

    Allgemeine Diskussion

  • Hallo,

    ich habe mit VB6 ein Programm entwickelt, aus dem heraus ein DOS-Programm [liegt als 32- und 64-Bit Variante vor, der Benutzer kann waehlen, welche Variante gestartet werden soll, abhaengig von seinem Betriebssystem] ueber die API-Funktion CreateProcess gestarter wird. das DOS-Programm befindet sich in einem Unterordner des VB6-Programms.

    Das Starten des DOS-Programms funktioniert unter Windows 2000, XP, Vista und Windows 7, 32-Bit, aber nicht unter Windows 7, 64-Bit, wie mir 2 Benutzer gemeldet haben. Die Funktion CreateProcess gibt den Wert 0 zurueck.

    Kann mir jemand eine Hilfestellung geben, wie dieser Aufruf zum Funktionieren gebracht werden kann?

    Dafuer waere ich ausserordentlich dankbar.

    Ich bedanke mich schon im voraus fuer jeden Hinweis, der mich in dieser Sache einer Loesung naeherbringt!

    Hier die Programmzeilen:

    solveTask = App.Path & "\" & InputDir & "\" & InputFile

    ShellWait PopeyeExe & " " & solveTask, cbShowDOSWindow.Value = 1

    Public Function ShellWait(cmdline As String, Optional ByVal bShowApp As Boolean = False) As Boolean

    .

    RetVal = CreateProcess(0&, cmdline, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, uStart, uProc)

    .

    End Function 

    Gruesse,
    Lilywhite Lilith
    Sonntag, 3. April 2011 18:23

Alle Antworten

  • Hallo,

    meine zuvor gestellte Frage moechte ich korrigieren.

    Es ist kein DOS-Programm, das ueber CreateProcess gestartet werden soll, sondern ein Kommandozeilenprogramm.

    Dieses soll von einem VB6-Programm aus gestartet werden. Das Kommandozeilenprogramm befindet sich in einem Unterordner des aufrufenden VB6-Programms und liegt in einer 64-Bit-Version vor [es kann auch eine 32-Bit-Version gestartet werden. Der Anwender hat die Moeglichkeit, abhaengig von seinem Betriebssystem vorher auszuwaehlen].

    Die entscheidenden zwei Zeilen:

    cmdline="c:\programme\chessdiagrammer\engines\popeye\pywin64.exe c:\programme\chessdiagrammer\engines\popeye\input\#4_04062011_154123.INP" 

    lRetVal = CreateProcess(0&, cmdline, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, uStart, uProc)

     

    Mir wuerde es bereits sehr weiterhelfen, wenn mir jemand bestaetigen kann, dass das beschriebene Vorhaben auch unter Windows 7 64-Bit weiterhin funktioniert.

    Getestet wurde der Start des 32-Bit-Kommandozeilenprogramms unter WIN 2000, XP und Vista, 32-Bit. Dabei sind keinerlei Probleme aufgetreten.

    Danke im voraus, wenn jemand von den Cracks mir einen Hinweis geben kann/moechte.

    Viele Gruesse,

    Lilith


    Mittwoch, 6. April 2011 10:59
  • ...aber nicht unter Windows 7, 64-Bit, wie mir 2 Benutzer gemeldet haben. Die Funktion CreateProcess gibt den Wert 0 zurueck.

    Hallo Lilywhite_Lilith,

    Das bedeutet die Funktion CreateProcess wird nicht erfolgreich ausgeführt sondern schlägt Fehl…mit einer Fehlermeldung. Welche ist jetzt diese Fehlermeldung? (http://msdn.microsoft.com/en-us/library/aa908775.aspx)

    Laut diesem Artikel: „A word of warning: CreateProcess and its variants will always fail if a non-elevated application attempts to launch another application whose manifest requires elevation. GetLastError will return 740 (ERROR_ELEVATION_REQUIRED) in this case. When this is a possibility and you don't need the fine control over process creation that CreateProcess provides, use ShellExecute instead.“

    Frage: Was bekommst Du von der Funktion GetLastError?

    Zeig mal den kompletten Code damit man auch die Signaturen der API-Funktionen sieht.

    Grüße,

    Robert

    Freitag, 15. April 2011 10:00
    Besitzer