Datei mit bestimmten Programm öffnen

Anfängerfragen zum Programmieren mit PureBasic.
Olaf.Renns
Beiträge: 27
Registriert: 26.02.2009 10:11

Datei mit bestimmten Programm öffnen

Beitrag von Olaf.Renns »

Guten Morgen Community,

berufsbezogen muss ich mich mit PureBasic beschäftigen. Die anfängliche Skepsis zu diesem Programm ist bisher fast völlig verflogen und eher einem "Wow"-Effekt gewischen. Gerade auch die Stärke der Sprache und der Community überrascht mich immer wieder. Daher Lob an die genannten Dinge.

Da ich in Sachen "Reine Anwendungsentwicklung" Neuland bertete (Ich bin reiner SAP-Entwickler) habe ich nun ein kleines Denkproblem, bei den ihr, die Community, doch bestimmt weiter helfen könnt.

Auf unsere Server werden nach dem Run einer Transkation exeähnliche Dateien erzeugt, die als Batch-Input Mappen eine ausführbaren Parameter besitzten. Diese Dateien müssten zeitgleich direkt ausgeführt werden, um die Sachen direkt zu verbuchen. In der Vergangenheit wurde dies händisch gemacht, was heut zu Tage ja eher ungewöhnlich ist. Das Monitor-Programm habe ich bereits geschrieben. Die PB-Anwendung connected zum Server und erkennt alle erzeugten Dateien. Leider habe ich beim Ausführen der exeähnliche Dateien das Problem, das diese, aus irgendwelchen SAP-Gründen, keine Dateiendung besitze d.h. die Exebezeichnung ".exe" fehlt. Aus diesem Grund kann ich die datei mittels des RunProgram Functions nicht einfachen ausführen. Ohne den Zusatz ".exe" wird die Datei aber auch nicht ausgeführt, da es für Windows keine 100% EXE-Datei ist. Hier also meine Frage:

Wie kann ich eine Datei ohne Dateiendung direkt als EXE ausführen, ohne diese Datei umzubennen oder zu kopieren?

Hier mal mein bisheriger "Versuchs"-Code :mrgreen:

Code: Alles auswählen

RunProgram("X:\Users\SuperAdminstrator\ExeOhneDateiendung")
Man müsste im Grunde also herausfinden, was Windows macht, wenn eine Exe beispielsweise durch den User mit einem Doppelklick gestartet wird. Stößt Windows da eine andere EXE an, um die angegebene Exe zu starten oder läuft die Sache ganz anders ab (Header-Geschichte). Über Aufklärungshilfe würde ich mich sehr freuen.

SAP'lische Grüße und Hallo
Benutzeravatar
bembulak
Beiträge: 228
Registriert: 13.12.2005 16:34
Wohnort: Österreich

Beitrag von bembulak »

Hi,

finde ich sehr interessant.
Wie sieht das "Icon" dieser Nich-Exe aus? Was ist, wenn du im Explorer unter Extras | Ordneroptionen | Dateitypen nachsiehst? Was ist da hinterlegt?

Du hast von 'nem Parameter gesprochen:
exeähnliche Dateien erzeugt, die als Batch-Input Mappen eine ausführbaren Parameter besitzten.
Hast du versucht, die Datei mit Parameter zu starten?
Was sind diese "Batch-Input"-Mappen? Kannst du diese mit RunProgramm und der Nicht-Exe als Parameter starten?
Wäre es möglich, die "Bath-Input"-Mappen mit PB zu erzeugen und anzuwerfen?

*neugierigbin*

Sorry, wenn ich dir jetzt nicht so einfach helfen kann....
... aber wir werden schon was finden!
Olaf.Renns
Beiträge: 27
Registriert: 26.02.2009 10:11

Beitrag von Olaf.Renns »

Hallo bembulak,

Fragen sind natürlich herzlich Willkommen :-)
Wie sieht das "Icon" dieser Nich-Exe aus? Was ist, wenn du im Explorer unter Extras | Ordneroptionen | Dateitypen nachsiehst? Was ist da hinterlegt?
Die Datei besitzt das Standarticon eines unbekannten Dateiformats. Ganz normal also. Da die Batch-Input Mappen aber keine Dateiendung hat, also nur aus "Dateiname" besteht, gibt es unter den Ordneroptionen auch keine Eintrag dazu.

Code: Alles auswählen

Hast du versucht, die Datei mit Parameter zu starten? 
Im ersten Anlauf hatte ich versucht, mittels der CallFunction bzw. mit dem Ansprechen der Rundll32.exe diese Datei zu starten. Zwar gibt mir die RunProgramm eine 1 zurück, wurde also erfolgreich gestartet, aber von der Anwendung keine Spur (es erscheint keine Auslagerungsdatei auf dem Server, die zeigt, das die Mappe auch verarbeitet bzw. als Anwendung gestartet wurde). Getestet habe ich das auch mit einer einfachen Messagebox Anwendung. Das Problem wird sein, das die o.g. Funktion auch nur funktionieren, wenn man in der Datei eine hinterlegte Funktion anspeicht, also quasie eine DLL startet. Leider besitzt aber dies Typ von batch-Input Mappen keine Procedure-typischen Funktionen (Wie auch viele Exe-Dateien). DLL-Dateien hingegen werden ja eher nach dem Procedure-Struktur aufgebaut, also kein Code "im freien Raum".
Was sind diese "Batch-Input"-Mappen?
Batch-Input Mappen sind Dateien bzw. Mappen, die verschiedene Inhalte haben können. Meistens werden Batch-Mappen dazu verwendet, um größere Kostenumbuchungen regelmäßig, beispielsweise einmal pro Monat, durchzuführen.

Einfach Beispiel: Du bekommst jeden Monat eine Rechnung für Dienstleistungen, die anteilig auch jeden Monat auf verschiedene Kostenstellen gleich verteilt werden soll:
Kostenstelle 80112 = 10% vom Rechnungsbetrag
Kostenstelle 80113 = 12% vom Rechnungsbetrag
Kostenstelle 80114 = 20% vom Rechnungsbetrag
Der Betrag varriert aber stets um ein paar EUR. Mit einer Transaktion wird dann der aktuelle Rechnungsbetrag an den Verteilerschlüssel übergeben und damit die aktuellen Werte in eine Zwischendatei gespeiert. In dieser Zwischendatei steht dann:
Kostenstelle 80112 = 100 EUR
Kostenstelle 80113 = 120 EUR
Kostenstelle 80114 = 200 EUR
Diese Zwischendatei ist quasie die Batch-Input Mappe, die dann beispielsweoise über SAP direkt verbucht werden kann. Ist alles sehr einfach beschrieben und weicht noch etwas von der Praxis ab, aber im Grunde ist das das Grundgerüst.
Kannst du diese mit RunProgramm und der Nicht-Exe als Parameter starten?
Die normalen Batch-Input Mappen besitzen keinerelei Runtimes, können somit auch nicht ausgeführt werden, sonder nur über SAp direkt abgespielt werden. Die sogennanten Batch-Input Mappen mit ausführbaren Parameter sind quasie Exe-dateien, die ohne die Endung "*.exe" erstellt wurde. Wir haben bei uns diese Option, um nicht auf allen Server/PC's ein aktuelles SAP installiert haben zu müssen und so auch beispielsweise unterwegs einfach Batch-Input Mappen oder neue Patch Level Scripts (Das ist wieder eine etwas andere Sache) abspielen zu können.
Wäre es möglich, die "Bath-Input"-Mappen mit PB zu erzeugen und anzuwerfen?
Nein, nur über Umwege bzw. mit dem Kauf von Rechten bzw. mit der Lizensierung bei SAP, was sehr teuert ist. Dies Bedarf vollen Zugriff auf den SAP Data Server, was sich SAp teuer bezahlen lässt.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Datei mit bestimmten Programm öffnen

Beitrag von ts-soft »

Olaf.Renns hat geschrieben:

Code: Alles auswählen

RunProgram("X:\Users\SuperAdminstrator\ExeOhneDateiendung")
funktioniert doch

Ansonsten bei Doppelklick orientiert sich Windows an der Extension, anders
als in Linux (obwohl sich das dort auch immer mehr durchsetzt, aber nicht
für ausführbare Dateien).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Moin Olaf, und willkommen an Board!

interessante Problemstellung, von sowas hab ich noch nie gehört.

wie wurde diese Datei denn sonst "ausgeführt", bevor du das Verfahren ändern solltest?

ist es denn ganz sicher eine EXE vom Fornat her, inclusive Header und allem drum und dran?

sonst könnte es auch ein Interpretercode sein, der eben eine bestimmte Runtime benötigt.

selbst wenn es grundsätzlich ausführbarer code ist, könnte es eine OBJ oder LIB sein,
müßte also immer noch gelinkt (verbunden) werden um zur EXE zu werden.

wird diese Datei von einem SAP-Modul erzeugt?
gibt es dort keine Dokumenation, wie die behandelt werden muss?
evtl. gibt es eine DLL im SAP Paket, die von extern aufgerufen werden kann.
oder man muss direkt ein SAP Modul mit Parametern per RunProgram starten.

evtl. könnte man diese Daten ja gleich völlig anders exportieren,
dass sie leichter von einem externen Programm verarbeitet werden können?


[CHANGE]
na supi... jetzt erst dein zweites Posting gelesen...
drei Absätze umsonstig getippt...


also, die externe Ausführung der Batch-Input-Mappen muss ja von SAP dokumentiert sein.

wenn das Format ausführlich dokumentiert wäre könnte man sie auch mit PB auswerten.

ABER du bewegst dich hier wahrscheinlich hart an der Grenze zu einem Lizenzverstoß.

SAP hat den Zugriff nicht ohne Grund eingeschränkt, natürlich wollen die mit ihrem Produkt Geld verdienen.
Die sinnvollsten Alternativen wären
a) ein Ausbau der Versorgung mit SAP-Modulen, also, Lizenzen zukaufen oder
b) eine successive Umstellung auf ein komplett anderes, möglicherweise selbst erstelltes Verwaltungssystem.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Hartmut
Beiträge: 56
Registriert: 15.09.2006 22:22
Kontaktdaten:

Beitrag von Hartmut »

Hallo Olaf,

wahrscheinlich verstehe ich die Problemstellung nicht richtig, aufgrund derer du versuchst Batch-Input-Mappen quasi "von aussen" abspielen zu lassen.

Wenn manuelle Operationen in der SM35 automatisiert werden sollen, bietet Walldorf meines Wissens den Standardreport RSBDCSUB an,
mit dem solche Dinge automatisiert werden können.

Ich habe eben nur mal kurz gesucht und selber diesen Report noch nicht verwendet - eventuell müsstest du hier auch nochmal das OSS bemühen.
Olaf.Renns
Beiträge: 27
Registriert: 26.02.2009 10:11

Beitrag von Olaf.Renns »

Hallo und danke für eure Posts!
funktioniert doch
Der Code von mir ...
RunProgram("X:\Users\SuperAdminstrator\ExeOhneDateiendung")
funktioniert bei mir nicht, weil Windows die Datei nicht als EXE interpretiert. Im Grunde passiert garnichts.
Lizenzverstoß
SAP ist leider ein lizensversautes System. Dennoch kommt es bei extern erzeugten und ausgelagerten Data-Strukturen zu keinenn Lizensbrüchen. Was SAP ausgibt, kann gehandhabt werden wie es will. Lizensprobleme gibt es nur, wenn man in das operative System eingreift, also die Batch-Input Daten direkt vom Server holen möchte (und dabei keine SAP-Vorgehensweisen bzw. Funktionen benutzt) oder die Bach-Input-Daten in das System verändert einspielt bzw. auf nicht rechtliche Art und Weise einspielt. Die Batch-Input Mappen mit ausführbaren Parameter ist ein lizensierten Produkt, was aber nicht Bestandteil von SAP ist. Das Problem ist, das dieses Produkt zwar EXE Dateien erzeugt, diese aber nicht die bekannte Endung haben, da dies eine weitere Lizensierung und damit verbunden weit höhere Lizenskosten mit sich bringen würde. Im Grunde umgeht man mit dieser Variante einfach die Bestimmung von SAP auf legale Art und Weise. Für SAP ist eine EXE nur eine EXE, wenn diese auch solches eindeutig zu erkennen ist und auch eindeutig ausgeführt werden kann, was bei Batch-Input Mappen mit ausführbaren Parameter ohne die Dateiendung nicht gegeben ist.
SM35
Die Batch-Input Mappen mit ausführbaren Parameter tauchen nach dem Erzeugen aber nicht in der SM35 auf, weil diese keine Standart-Batch-Mappen sind und auch nicht als solche gehandhabt werden sollen. Das ist auch richtig so, da diese im Grunde nichts mit dem sichtbaren operativen System zu tun haben. Bei den Batch-Input Mappen mit ausführbaren Parameter handelt es sich im Großen und Ganzen um Systemanpassung und Syngrinations-Mappen, die weitaus mehr Bereiche abdenken, als das simple Verbuchen von Kosten. Zudem werden hier viele Mappen erstellt, die das nutzbare SM35 nur zusätzlich zumüllen würden.
Benutzeravatar
bembulak
Beiträge: 228
Registriert: 13.12.2005 16:34
Wohnort: Österreich

Beitrag von bembulak »

Ich habe jetzt versucht die allwissende Müllhalde zu befragen, aber ausser den ohnehin schon genannten "SM35" tauchen da nur andere SAP-Buzzwords auf, die für mich zumindest wenig aussagekräftig sind.

Ich frage jetzt einfach nochmal ganz, ganz naiv:

Code: Alles auswählen

X:\Users\SuperAdminstrator\ExeOhneDateiendung
X ist ein Netzlaufwerk, auf das du logisherweise zugriff hast. Welcher Server (Betriebssystem) steck dahinter? Läuft auf dem Server irgendwas, dass den "Doppelklick" auf die Datei erkönnen/abfangen könnte?
Was passiert ganz genau, wenn du z.B. diese Datei im Windows-Explorer doppelt mit der Maus anklickst? Siehst du dann ein Fenster? Eine Konsole (DOS-Box) oder was auch immer? Irgendwas muss sich ja tun...
Kannst du die Datei als Parameter an die CMD übergeben?
Wie nennt sich der Vorgang zum erzeugen dieser Nicht-Exe im SAP-Jargon? (Vielleicht hilft das bei einer weiteren Google suche)

Danke.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Olaf.Renns hat geschrieben:Hallo und danke für eure Posts!
funktioniert doch
Der Code von mir ...
RunProgram("X:\Users\SuperAdminstrator\ExeOhneDateiendung")
funktioniert bei mir nicht, weil Windows die Datei nicht als EXE interpretiert. Im Grunde passiert garnichts.
Ich hab eine Exe umbenannt, von test.exe in test und konnte test mit RunProgram starten.
Vielleicht liegt das an Vista?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bembulak
Beiträge: 228
Registriert: 13.12.2005 16:34
Wohnort: Österreich

Beitrag von bembulak »

Googlesuche hat geschrieben:http://www.bapi.is-here.de/
Es gibt also sowas wie SAPGui (eine Lib oder so?) und ein SAPSDK das offenbar irgendwo dabei ist und man von Delphi aus steueren kann.
Demnach sollte es mit etwas Handarbeit auch mit PB gehen, denke ich...

edit:
kann es also sein, dass auf den Clients doch irgend ne Runtime oder so installiert ist??
Antworten