C# Programm beim Booten starten


  • Vielleicht wärs einfacher die Anforderungen des Programms in ... C / C++ umzusetzen und somit auf dieses, meines Erachtens ohnehin, dämliche .NET gedöns zu verzichten?

    hatte ich auch schon vorgeschlagen und den Weg gezeigt, aber .....

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hi Dreamshader,


    Hi Andreas,
    ja ... das dachte ich mir schon, dass ihr da schon darauf hingewiesen hattet - ihr macht das schliesslich auch nicht erst seit gestern ;) ...
    Aber vielleicht ging's ein bisschen zu sehr drunter und drüber und unser TE, der ja, wie er selbst sagt, ziemlich unbeleckt ist, hat einfach die Übersicht verloren.
    Ich sag' mir halt: jeder hat eine zweite Chance verdient und wenn man mal ehrlich ist: er gibt sich ja Mühe (da hatten wir schon andere Kandidaten :fies: ) ... ist ja alles nicht so einfach am Anfang ...


    Das stimmt alles, er gibt sich echt Mühe, uns zu verstehen...

    baumus: Als ich 2012 mit dem Raspberry angefangen habe, habe ich mir die Ausgaben des Online-Magazins TheMagPi heruntergeladen und durchgelesen. Heute gibt es davon 43 Ausgaben zzgl. etlicher Sonderausgaben. Für Dich wäre wahrscheinlich die Ausgabe "Conquer the Command Line" das Richtige. Ich gebe mal mit Absicht keinen Link. Das Teil lässt sich auf der Homepage der Foundation finden. Auf der Hauptseite ist ganz unten ein Link auf TheMagPi... Und dann fröhliches Downloaden, Lesen, Aha-Effekte, Nachmachen, noch mehr Aha-Effekte und neue Ideen.

    Und einen habe ich noch: Wie wäre es, wenn Du statt Deines C#-Exe-Teils einfach ein Programm wie cuteCom laufen lässt? Das zeigt Dir alles an, was von der seriellen Schnittstelle kommt.

    Code
    sudo apt-get install cutecom


    (wenn ich mich nicht irre)


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    2 Mal editiert, zuletzt von Andreas (15. Oktober 2017 um 11:14)


  • Das stimmt alles, er gibt sich echt Mühe, uns zu verstehen...
    baumus: Als ich 2012 mit dem Raspberry angefangen habe
    Andreas

    als ich 2013 angefangen hatte und mich für C Programme am PI interessierte half mir das hier:


    vergiss mono und Krücken und schon gar EXE
    http://kampis-elektroecke.de/?page_id=1544

    voila, die ersten Programme liefen nach einem Abend.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hi Jar,


    voila, die ersten Programme liefen nach einem Abend.

    [OT]
    ich hatte als erstes Lazarus installiert - das Laufzeit-Verhalten des Compilers war (damals) grauenvoll. Dann hatte ich mich an Icon erinnert. Und - hui - das lief richtig flott!

    [/OT]

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Danke erstmal, dass sich so viele um dieses Thema bemühen! Ich werde versuchen alles so gut es geht zu beantworten.


    Also ... dann würde ich vorschlagen erst mal den absoluten Pfad von mono mit "which mono" zu ermitteln

    Habe es jetzt auf

    Code
    ...
    /usr/bin/mono /home/pi/Desktop/Einlesen.exe &
    ...

    geändert. Jetzt starten allerdings im Hintergrund nicht mehr mono - habe das mit "top" überprüft" --> siehe EDIT am Ende.


    lernwillig ... lehr willig wäre etwas anderes ;)

    Stimmt :rolleyes:


    Was passiert, wenn Du jetzt /etc/rc.local direkt aufrufst?

    Habe das mit "sudo su" (also sollte ich doch alle Rechte haben, oder?) ausgeführt, und bekomme folgendes zurück: --> siehe EDIT

    Code
    root@raspberrypi:/home/pi# /etc/rc.local: 16: /etc/rc.local: /usr/bin/: Permission denied


    Automatisch zusammengefügt:


    Was genau macht denn dein C# Programm?

    Ich kann hier gerne de Quellcode von dem Programm schicken, allerdings weiß ich jetzt nicht so genau, ob das wirklich erwünscht ist.

    Es öffnet einen Port und sendet dann regelmäßig einen bestimmten Befehl an eine Interfacecard eines Wechselrichters einer PV-Anlage. Dieses Interfacecard antwortet, und diese Antwort muss dann interpretiert werden und in eine Textdatei gespeichert werden.
    Automatisch zusammengefügt:


    baumus: Als ich 2012 mit dem Raspberry angefangen habe, habe ich mir die Ausgaben des Online-Magazins TheMagPi heruntergeladen und durchgelesen. Heute gibt es davon 43 Ausgaben zzgl. etlicher Sonderausgaben. Für Dich wäre wahrscheinlich die Ausgabe "Conquer the Command Line" das Richtige. Ich gebe mal mit Absicht keinen Link. Das Teil lässt sich auf der Homepage der Foundation finden. Auf der Hauptseite ist ganz unten ein Link auf TheMagPi... Und dann fröhliches Downloaden, Lesen, Aha-Effekte, Nachmachen, noch mehr Aha-Effekte und neue Ideen.

    Und einen habe ich noch: Wie wäre es, wenn Du statt Deines C#-Exe-Teils einfach ein Programm wie cuteCom laufen lässt? Das zeigt Dir alles an, was von der seriellen Schnittstelle kommt.

    Code
    sudo apt-get install cutecom

    Ich bin wirklich gerne bereit das alles zu lernen, den langsam werden mir doch auch die Vorteile von Linux und dem Raspberry Pi bewusst^^
    Allerdings habe ich das Problem, dass ich bei diesem Projekt unter einem ziemlichen Zeitdruck stehe und dieses Programm dringend zum Laufen bringen müsste...
    Automatisch zusammengefügt:

    EDIT:

    Habe wohl zw. bin/mono ein Leerzeichen gehabt - habe das entfernt und jetzt passiert genau das selbe wie bisher: es startet mono im Hintergrund (durch "top" bestätigt) allerdings wird das Programm an sich nicht ausgeführt.


    Was passiert, wenn Du jetzt /etc/rc.local direkt aufrufst?

    Das Programm wird fehlerfrei ausgeführt.

    Einmal editiert, zuletzt von baumus (9. März 2016 um 10:54)

  • Hallo Baumus,


    Ich kann hier gerne de Quellcode von dem Programm schicken, allerdings weiß ich jetzt nicht so genau, ob das wirklich erwünscht ist.

    Mach' das doch mal! Die meisten von uns können besser Software als raten. Wenn Du das C#-Programm selber geschrieben hast, dann dürftest Du gegen keine Urheberrechte verstoßen. Wenn Du das Programm von irgendwoher hast (und ggf. verändert hast), dann gib' wenigstens die Quelle an. Und wenn es eine Software ist, die Du z.B. von dem Hersteller der Photovoltaik-Anlage hast, dann sollte der zumindest mal gefragt werden, ob er mit einer Veröffentlichung hier einverstanden ist.



    Habe wohl zw. bin/mono ein Leerzeichen gehabt - habe das entfernt und jetzt passiert genau das selbe wie bisher: es startet mono im Hintergrund (durch "top" bestätigt) allerdings wird das Programm an sich nicht ausgeführt.


    Das Programm wird fehlerfrei ausgeführt.


    Dann kann es nur daran liegen, dass [font="Courier New"]/etc/rc.local[/font] aufgerufen wird, bevor ALLE erforderlichen Ressourcen eingebunden sind. Denn wenn Du [font="Courier New"]/etc/rc.local[/font] manuell aufrufen kannst, dann sind logischerweise alle Ressourcen vorhanden. Daraus bleibt zu schlussfolgern, dass [font="Courier New"]mono dingsbums[/font] erst aufgerufen werden kann, nachdem ALLE Ressourcen gestartet wurden. Somit kommt dann allen Anscheins nach ein Autostart über [font="Courier New"]/etc/rc.local[/font] nicht in Frage...

    :s
    Vorschlag meinerseits: Einen Autostart einsetzen, der X gestartet hat, denn dann sind garantiert ALLE Ressourcen vorhanden. Auch das war bereits Ergebnis der ersten 7 Beiträge dieses Posts.

    Baumus, gehe doch noch mal in die FAQ mit den Autostarts und schaue Dir mal an, welche der - soweit ich mich entsinnen kann - beiden Möglichkeiten beschrieben sind, Programme, die X erfordern, per Autostart aufzurufen. Setze das mal so um, wie es dort beschrieben steht und teile uns hier mit:
    a) was Du gemacht hast
    b) was das jeweilige Ergebnis ist


    Beste Grüße und gutes Gelingen!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (9. März 2016 um 12:01)

  • Hm ...


    ... im Hintergrund (durch "top" bestätigt) allerdings wird das Programm an sich nicht ausgeführt.

    ist das jetzt das Verhalten nach einem reboot?


    Das Programm wird fehlerfrei ausgeführt.

    ok ... also beim direkten Aufruf tut's also, was es tun soll.
    Tjaaa ... vielleich machen wir mal einen service draus - wäre eh besser.
    Was ist Dein bevorzugter Editor auf dem RPi bzw. mit welchem kannst Du einigermassen umgehen?

    cu,
    -ds-

  • Mach' das doch mal!

    Habe alles selber geschrieben also verstoße ich keine Urheberrechte. Hier der C#-Quellcode:


    Vorschlag meinerseits: Einen Autostart einsetzen, der X gestartet hat, denn dann sind garantiert ALLE Ressourcen vorhanden. Auch das war bereits Ergebnis der ersten 7 Beiträge dieses Posts.

    Werde es noch mal probieren - danke erst mal für die viele Unterstützung bisher! :bravo2:
    Automatisch zusammengefügt:

    ist das jetzt das Verhalten nach einem reboot?

    Jo...


    Was ist Dein bevorzugter Editor auf dem RPi bzw. mit welchem kannst Du einigermassen umgehen?

    Ich habe auf dem RPi selber noch nie etwas programmiert - habe also absolut keine Erfahrungswerte...

    Einmal editiert, zuletzt von baumus (10. März 2016 um 08:17)

  • Hallo Baumus,

    was mir da gerade noch einfällt.

    Der Raspberry Pi aktiviert beim Booten die serielle Schnittstelle, um z.B. Bootmeldungen über die serielle Schnittstelle an ein anderes Gerät zu senden. Darüber kann man sich dann sogar auch einloggen.

    Ich vermute, dass diese Betriebsart es verhindert, dass Du über [font="Courier New"]/etc/rc.local[/font] während des Bootens irgendwas mit der seriellen Schnittstelle anstellen kannst. Sie ist einfach für andere Aufgaben blockiert.

    Dies bestärkt mich immer mehr, dass die serielle Schnittstelle für Deine Anwendung erst dann reibungslos zur Verfügung steht, wenn Deine Anwendung erst nach Abschluss eines vollständigen Hochfahr-Prozesses in Aktion tritt.

    [font="Courier New"]/etc/rc.local[/font] ist dann definitiv das falsche Mittel. Alle bisher berichteten Beobachtungen bestätigen dies.

    Den Quellcode schaue ich mir mal an. Ich glaube aber momentan nicht, dass dort die Ursache für die Problematik stecken kann.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.


  • es geht dabei nicht um Programmieren sondern darum, eine Datei zu verändern.
    nano oder was benutz Du da normalerweise?

    Ach so - ja verwende nano.
    Automatisch zusammengefügt:


    [font="Courier New"]/etc/rc.local[/font] ist dann definitiv das falsche Mittel.

    Ok, danke. Hab das eigentlich eh schon abgehackt. Hab es jetzt mit einer eigenen sh-Datei im Verzeichnis /etc/init.d angelegt. Diese hat den folgenden Inhalt:

    Anschließend habe ich den Befehl

    Code
    root@raspberrypi:/home/pi# /etc/init.d $ sudo update-rc.d testSchript.sh defaults

    eingegeben.
    Antwort:

    Code
    bash: /etc/init.d/: Is a directory

    Ergebnis: Es passiert nichts.
    Allerdings glaube ich dass es daran liegt, dass dass ich unter dem "runlevel" keinen "Link" erstellt habe. Allerdings blicke ich da nicht ganz durch...

    mfg

    ____________
    EDIT: Habe ein runlevel 5.

    Einmal editiert, zuletzt von baumus (10. März 2016 um 11:17)

  • Holla ... da bist Du ja schon eigenständig weit vorgalloppiert :thumbs1:


    ...

    Code
    root@raspberrypi:/home/pi# /etc/init.d $ sudo update-rc.d testSchript.sh defaults

    eingegeben.
    Antwort:

    Code
    bash: /etc/init.d/: Is a directory


    ...


    da ist ein Fehler in dem Aufruf ... sieht zumindest so aus weil zwei prompt-Zeichen erscheinen.
    Das würde nämlich alles auf den ersten Blick passen ...
    Probier' das mit dem Kommando noch mal.

    "sudo update-rc.d testSchript.sh defaults"

    sollte reichen ...

    //EDIT: den Link erzeugt der Aufruf ;)

    cu,
    -ds-

  • Das Problem ist mit ziehmlicher Sicherheit dass du in deinem Programm keinen Absoluten/Vollständigen Pfad bei der Logdatei verwendest und sie somit nicht da erstellt wird(wurde) wo du sie erwartest:

    Code
    const string filename = "AusgeleseneDaten.dat";
    ...
    FileStream fs = new FileStream(filename, FileMode.Append);
    ...

    Ich hatte mal mit einem über die /etc/rc.local gestartetem Shellskript getestet was in diesem Fall passiert: Die Datei wurde dann einfach unter / erstellt.

    Poste mal die Ausgabe von:

    Code
    ls -la /AusgeleseneDaten.dat


    Das klingt auch sehr danach:

    Zitat


    Habe wohl zw. bin/mono ein Leerzeichen gehabt - habe das entfernt und jetzt passiert genau das selbe wie bisher: es startet mono im Hintergrund (durch "top" bestätigt) allerdings wird das Programm an sich nicht ausgeführt.


    Das Programm wird fehlerfrei ausgeführt.

    DON'T PANIC!

  • Hi joh,


    Das Problem ist mit ziehmlicher Sicherheit ...

    das ist ein sehr guter Hinweis ... stimmt, das kann evtl. sogar für einen Abbruch sorgen.
    Also nach dem chmod +x und Anpassen des Dateipfades sollte das Problem dann behoben sein ...

    cu,
    -ds-

  • Hallo Joh,


    Das Problem ist mit ziehmlicher Sicherheit dass du in deinem Programm keinen Absoluten/Vollständigen Pfad bei der Logdatei verwendest und sie somit nicht da erstellt wird(wurde) wo du sie erwartest:

    wie der Lateiner sagt:
    veni vidi vici

    :thumbs1:

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (10. März 2016 um 14:28)


  • da fehlt scheinbar noch ein "chmod +x testScript.sh" ... danach noch mal probieren ...

    Ausgabe:

    Code
    usage: update-rc.d [-n] [-f] <basename> remove
               update-rc.d [-n] <basename> disabel|enable [S|2|3|4|5]
                                   -n: not really
                                   -f: force
    
    
    The disable|ebable API is not stable and might change in the future.

    Ähm ich weiß nicht was ich damit anfangen soll...

    Funktionieren tuts auf jeden Fall noch nicht.
    Automatisch zusammengefügt:

    Code
    @reboot   ~/test.sh

    Eingabe:

    Code
    @reboot /etc/init.d/testScript.sh

    Ausgabe:

    Code
    bash: @reboot: command not found

    Hätte ich was anderes eingeben sollen?

    Einmal editiert, zuletzt von baumus (10. März 2016 um 20:28)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!