Unterschiedliches verhalten runshell() 32bit 64bit ?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Unterschiedliches verhalten runshell() 32bit 64bit ?

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

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

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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 ...
Gruß
Hubert
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

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

Beitrag 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
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

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

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

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

Beitrag 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?
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

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

Beitrag 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 :?:
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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
Gruß
Hubert
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

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

Beitrag von mini990 »

guten Morgen,
der String, vereinfacht aufgelöst:

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

Gruß Stefan
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

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

Beitrag 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
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

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

Beitrag 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
Valar Morghulis

Gruss Carlo
Antworten