Seite 1 von 1

Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Di, 28. Aug 2018 17:00
von mini990
Hallo,
beim testen habe ich ein kleines Phänomen entdeckt.
Runshell verhält sich anscheinend unterschiedlich bei 32 und 64 bit. Kann das sein?
Unter 32bit ok, mit 64bit kein Entpacken.
Der Aufruf:
cmdline:="/C " + LiniFile:ReadString("System","PRISMApfad", "\PRISMA") +"32\funzip " + substr(getenv("COMSPEC"),1,3)+'_PRISMA\efpd.gz >' + substr(getenv("COMSPEC"),1,3)+'_PRISMA\ef.pd'
RUNSHELL( cmdline,"cmd.exe",.F.,.T.)

Das Programm funzip.exe läuft auch auf 64 Bit. Führe ich den Befehl in der Dosbox direkt aus funktioniert es
funzip efpd.gz > ef.pd

Gruß Stefan

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Di, 28. Aug 2018 19:26
von Tom
Solange das kein 16-Bit-Programm ist, sollte es funzen. Ändere doch mal den dritten Parameter in .T., dann kannst Du sehen, was im CMD-Fenster abläuft.

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Mi, 29. Aug 2018 8:04
von brandelh
ich würde das in eine CMD Datei packen (z.B. auch dynamisch) und diese aufrufen. Dort kannst du Pause etc. einbauen und die Fehlermeldung lesen.
Es könnte z.b. am Pfad liegen, die runshell() cmd box hat nicht zwingend die gleichen Rechte / Pfade wie die von dir manuell geöffnete.
Dazu wurde was über den START Befehl in der Doku geschrieben, vermutlich bei runshell ...

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Mi, 29. Aug 2018 8:32
von mini990
Habe den dritten Parameter auf .T. geändert.

RUNSHELL( cmdline,"cmd.exe",.T.,.T.)

...und damit funktioniert es auch auf dem 64-Bit Rechner.

Ich frag mich zwar wieso, aber......

Gruß Stefan

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Mi, 29. Aug 2018 8:58
von mini990
Ich versteh's nicht mehr....
Windows 32-Bit
RUNSHELL( cmdline,"cmd.exe",.T.,.T.) -> funktioniert nicht
RUNSHELL( cmdline,"cmd.exe",.F.,.T.) -> funktioniert

Windows 64-Bit
RUNSHELL( cmdline,"cmd.exe",.F.,.T.) -> funktioniert nicht
RUNSHELL( cmdline,"cmd.exe",.T.,.T.) -> funktioniert

Kann man irgendwie abfrage ob 32 oder 64 Bit?

Gruß Stefan

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Mi, 29. Aug 2018 9:07
von Tom
Es gibt einige offene oder erst in der 2.0 geschlossene PDRs zu RunShell, zum Beispiel diesen:

http://www.alaska-software.com/scripts/ ... PDRID=6501

Hast Du da mal drüber-/durchgeschaut?

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Mi, 29. Aug 2018 9:51
von AUGE_OHR
mini990 hat geschrieben: Mi, 29. Aug 2018 8:58 Kann man irgendwie abfrage ob 32 oder 64 Bit?
JA

Code: Alles auswählen

FUNCTION Is64Bit()
RETURN IF( FILE( "C:\WINDOWS\SysWOW64","D" ), .T., .F. )
was meinst du mit "funktioniert nicht" ... die "Umleitung" > ef.pd :?:

Code: Alles auswählen

cmdline := "/C " + LiniFile:ReadString("System","PRISMApfad", "\PRISMA") +"32\funzip " + substr(getenv("COMSPEC"),1,3)+'_PRISMA\efpd.gz >' + substr(getenv("COMSPEC"),1,3)+'_PRISMA\ef.pd'
könntest du bitte den cmdline String posten wie der aufgelöst aussieht :?:

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Mi, 29. Aug 2018 10:15
von brandelh
mini990 hat geschrieben: Mi, 29. Aug 2018 8:58 Kann man irgendwie abfrage ob 32 oder 64 Bit?
in den Umgebungsvariablen ist das hinterlegt:

Code: Alles auswählen

NUMBER_OF_PROCESSORS=4
OS=Windows_NT
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=2a07

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Do, 30. Aug 2018 8:32
von mini990
guten Morgen,
der String, vereinfacht aufgelöst:

cmdline := "/C FUNZIP.EXE efpd.gz > ef.pd"

Gruß Stefan

Re: Unterschiedliches verhalten runshell() 32bit 64bit ? [ERLEDIGT]

Verfasst: Fr, 31. Aug 2018 10:27
von mini990
Ich setze nun die Version von Jimmy ein, leicht abgewandelt.
Danke!

Code: Alles auswählen

FUNCTION Is64Bit()
RETURN IF( FILE( GetEnv( "HOMEDRIVE") + "\WINDOWS\SysWOW64","D" ), .T., .F. )
Funktioniert für meine Zwecke.
@Tom: PDR hab ich mir angesehen, die Lösungsvorschläge funktionieren bei mir leider nurteilweise.
Trotzdem vielen Dank für den Hinweis.

Gruß Stefan

Re: Unterschiedliches verhalten runshell() 32bit 64bit ?

Verfasst: Fr, 31. Aug 2018 21:16
von ramses
Du könntest ja den Aufruf auch direkt über die Windows API absetzten ohne den Umweg der Alaska Runshell Funktion.

Ich verwende dazu schon lange folgende Funktion. Damit bist du selbst "Herr der Parameter"

Code: Alles auswählen

Function NewRunShell(cFile, cParameters, cDir, nMode, oDlg)
local sw_Mode := 1
local cStartDir := iif(empty(cDir), CurDir(), cDir)
local nWinMode  := iif(nMode == NIL, sw_Mode, nMode)
local nHandle   := iif(oDlg  == NIL, AppDesktop():GetHWnd(), oDlg:GetHWnd())
local nError
      if !file(cFile)
           msgbox( cFile+" ist nicht vorhanden.Start nicht m”glich","Shell32 ExecuteA")
      else
           nError  := DllCall("Shell32.dll", DLL_STDCALL, "ShellExecuteA", ;
                      nHandle, "open", cFile, cParameters, cStartDir, nWinMode)
           if nError < 32
                msgbox("Beim Start von "+cFile+" ist ein Fehler aufgetreten. Code:"+str(nError,3),"Shell32 ExecuteA")
           endif
      endif
return (nError)
Gruss Carlo