| |
VB & Windows APIAPI-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 04.04.11 21:29 |
| Hallo,
ich habe mit VB6 ein Programm entwickelt, aus dem heraus ein DOS-Programm [dieses 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 ueber CreateProcess funktioniert unter Windows 2000, XP, Vista und Windows 7, 32-Bit, aber nicht unter Windows 7, 64-Bit, wie mir 2 Benutzer gemeldet haben, und zwar weder in der 32-Bit noch in der 64-Bit-Variante. Direkt aus dem entsprechenden Ordner laesst sich das DOS-Programm in beiden Varianten starten.
Ich bin ziemlich ratlos und verzweifle langsam, habe leider auch kein Windows 64-Bit zum Testen verfuegbar.
Hier die Programmzeilen:
startProg = App.Path & "\" & PopeyeDir & "\" & pyEXE
solveTask = App.Path & "\" & InputDir & "\" & InputFile
ShellWait startProg & " " & solveTask, cbShowDOSWindow.Value = 1
Public Function ShellWait(cmdline As String, Optional ByVal bShowApp As Boolean _
= False) As Boolean
'Diese Funktion führt einen Befehl (in CmdLine) aus.
'Dabei wird das sich öffnende Fenster unsichtbar gemacht.
'Diese Funktion wird erst beendet, wenn der Befehl
'vollständig abgearbeitet ist.
'Die Datentypen initialisieren
uStart.cb = Len(uStart)
'uStart.wShowWindow = Abs(bShowApp)
If cbShowDOSWindow.Value = 1 Then
winStatus& = SW_SHOW
Else
winStatus& = SW_HIDE
End If
uStart.wShowWindow = Abs(bShowApp)
uStart.dwFlags = 1
'Fenster erzeugen
lRetVal = CreateProcess(0&, cmdline, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, _
0&, uStart, uProc) Hat jemand eine Idee, warum CreateProcess gerade unter einem Windows 64-Bit nicht funktioniert?
Gruesse,
Lilywhite Lilith | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 06.04.11 12:44 |
| Hallo Martoeng,
danke fuer Deine Antwort!
Ich bin ziemlich ratlos mit diesem Problem, weil ich selbst keine Testumgebung mit WINDOWS 7 64-Bit habe.
Bevor ich mir nur fuer diesen Zweck einen neuen Rechner kaufe, wuerde es mir schon helfen zu wissen, ob es generell weiterhin moeglich ist [unter windows 200, XP und Vista 32-Bit funktioniert der Aufruf ja ohne irgendwelche Probleme!], ein Kommandozeilenprogramm, das in einer expliciten 64-Bit-Variante vorliegt, ueber die API-Funktion CreateProcess gestartet werden kann.
Ich habe mein Problem zuvor im MSDN-Forum von Microsoft geschildert. Leider gar keine Reaktion von den Cracks dort, fuer die es ein Leichtes waere, einen weiterfuehrenden Hinweis zu geben. Sehr enttaeuschend...
Danke fuer Deine Unterstuetzung.
Viele Gruesse
Lilith | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 06.04.11 12:50 |
| @Martoeng
Ich hatte faelschlicherweise von einem DOS-Programm gesprochen, was Unsinn war. Es handelt sich um ein Kommandozeilen-Programm. Dieses befindet sich in einem Unterordner desjenigen Ordners, in dem sich das aufrufende VB6-Programm befindet. Ich denke, dass es in dieser Konstellation eher nicht mit fehlenden Rechten etwas zu tun hat [?].
Viele Gruesse
Lilith | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 06.04.11 15:00 |
| Hallo Martong,
herzlichen Dank fuer Deine Antwort!
auf diesen Link bin ich, neben vielen anderen, auch schon gestossen.
Hm, dem Hinweis auf moegliche Einfluesse eines Virenscanners auf den Programmstart werde ich mal nachgehen. Wenn sich der Virenscanner einklinkt und den Programmstart verzoegert, koennte es sein, dass die Funktion nicht lange genug wartet und zu frueh meldet, dass es nicht gestartet werden konnte??
Das koennte man dann wohl [hoffentlich] ueber die Auswertung von Err.LastDllError in Erfahrung bringen. Ansonsten konnte ich den Beitraegen auf der erwaehnten Seite nichts Weiterfuehrendes entnehmen.
Wo das VB6-Programm installiert wurde, werde ich mal erfragen. Ich bin in der ziemlich bescheuerten Situation, dass ich selbst keine Testumgebung habe und nur von 2 Benutzern die Rueckmeldung bekommen habe, dass das Kommandozeilenprogramm nicht startet. Beide haben Windows 7 64-Bit.
Vom Setup vorgegeben wird tatsaechlich der "Programme"-Ordner. Ich gehe mal davon aus, dass sich der Installationsordner dort befindet.
Mit dem naechsten Update werde ich dann wenigstens ueber Err.LastDllError den Fehler hoffentlich etwas genauer auswerten koennen.
Wenn ich aber halt wuesste, dass unter Windows 7 64-Bit die Funktion CreateProcess ueberhaupt nicht mehr funktioniert, koennte ich mir das Weiterforschen nach moeglichen Ursachen des Problems ganz sparen. Danach sieht es aber, nach allem, was ich in den Beitraegen zu dem Thema im Netz gefunden habe, wohl eher nicht aus.
Danke fuer Deine Unterstuetzung!
Viele Gruesse
Lilith | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 06.04.11 15:46 |
| Hier ein Beispiel des Programmaufrufs mit Übergabeparameter:
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) | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 06.04.11 20:20 |
| Danke fuer Deine Antwort!
Den Pfad uebergebe ich mit App.Path, ich wollte nur den kompletten Uebergabe-String mal zeigen, weil mir auch zwischendurch der Gedanke kekommen war, die Laenge koennte vielleicht Probleme machen.
Deinen Vorschlag, Programmaufruf und Parameter in zwei Strings zu uebergeben, werde ich gerne aufgreifen. Gerade schreibe ich ein kleines Tool, das nichts anderes tut als diesen Aufruf in verschiedenen Varianten durchzutesten, mit ordentlicher Fehlerauswertung. Ich hoffe, das fuehrt dann endlich auf die Spur dieses bis jetzt noch seltsamen Verhaltens.
Ich MUSS die Beendigung des aufgerufenen Programmes abwarten, weil eine Datei erzeugt wird, die dann in das VB-Programm geladen und angezeigt wird. Es handelt sich uebrigens um ein Schachloeseprogramm, das Schachprobleme loesen kann. Dia Aufgabe wird in einer Textdatei an das Kommandozeilenprogramm uebergeben und nach gefundener Loesung diese vom Programm in eine Textdatei geschrieben. Die lade ich dann wiederum in das VB-Programm zur Anzeige und Auswertung. Es kann aber auch sein, dass keine Loesung gefunden wird oder man die Such abbrechen moechte, weil sie zu lange dauert. Daher brauche ich die Kontrolle ueber den Prozess.
ShellExecute(EX) werde ich mir mal anschauen.
Herzlichen Dank fuer Deine Unterstuetzung!
Viele Gruesse
Lilith | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 06.04.11 23:10 |
| Nun habe ich das Problem, dass ich bei Verwendung des Parameters:
ByVal lpAppName As Long
das Programm nicht einfach als String uebergeben kann [dies provoziert den Laufzeitfehler 13, "Typen unertraeglich"].
Wie muss ich denn den Programmnamen uebergeben?? | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Franki | Datum: 07.04.11 05:29 |
| Hallo Lilith,
mal ganz dumm gefragt, von wem ist denn das Programm was da über Kommandozeile aufgerufen werden soll/muss. Wenn du das selbst geschrieben hast, dann kannst du doch da auch locker drauf verzichten. Oder den Code in eine DLL, eine Sub, Function, Webservice oder sonst was packen.
Gruß,
Frank | |
Re: API-Funktion "CreateProcess": Problem mit Windows 7 64-Bit | | | Autor: Lilith | Datum: 07.04.11 12:47 |
| Hallo Franki,
es ist ein ganz spezielles Freeware-Programm, "Popeye", das Schachprobleme loesen kann.
Es liegt nur in dieser Kommandozeilenform vor, und ich habe dafuer ein GUI entwickelt, das die gesamte Kommunikation mit diesem Programm abwickelt und die zahlreichen Parameter, die man einstellen kann, in Dialogen anzeigt.
Gruesse,
Lilith | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|