Geschrieben August 12, 2019 at 16:4712. Aug 2019 Hallo, ich habe ein Programm auf C# geschrieben, bei dem unter anderem die Zeit- und Datumsangabe des Red Bricks ausgegeben werden sollte (z.B.: DateTime.Now.Second). Bekomme dabei aber jedesmal, wenn ich es auf dem Red Brick laufen lasse die Fehlermeldung: "Unhandled Exception: System.IO.FileNotFoundException: Could not find file "/etc/localtime" File name: '/etc/localtime'" Beim Debuggen des Programms über Visual Studio funktioniert es hingegen einwandfrei, hierbei wird wahrscheinlich einfach die Computer-Zeitangabe verwendet. Wäre hierbei sehr dankbar für Hilfe. Meine zweite Frage wäre, wie ein Befehl aussieht die Red Brick Zeit über einen Programmtext individuell abzuändern. Also beispielsweise irgendein Datum mit beliebeiger Zeit vorzugeben. Vielen herzlichen Dank.
Geschrieben August 13, 2019 at 07:2913. Aug 2019 Moin, das ist vermutlich auf einen Bug im Brick Viewer zurückzuführen, der mit Version 2.4.5 gefixt wurde. /etc/localtime ist ein Symlink auf die gewünschte Zeitzone in /usr/share/zoneinfo/. Vor Version 2.4.5 hat der Brick Viewer aber localtime auf nicht vorhandene Dateien gelinkt, C# gibt dann die FileNotFoundException aus. Wenn du mit dem aktuellen Brick Viewer die Zeitzone des RED-Brick neu setzt, sollte das Problem behoben sein. Um die Zeit des RED-Bricks zu setzen kannst du date auf der Kommandozeile oder mit System.Diagnostics.Process verwenden. Zum Beispiel mit date +%s -u -s @1565681174 (als Unix-Timestamp, so macht es der Brick Viewer) oder mit date -s "13 AUG 2019 09:25:30"
Geschrieben August 22, 2019 at 11:2922. Aug 2019 Autor Vielen Dank für die Hilfe👌 Das Programm läuft jetzt auf dem Red Brick. Mir ist leider noch nicht ganz genau klar, wie ich die Zeit auf dem Red Brick manuell manipulieren kann. Muss ich dazu using System.Diagnostics bzw. Using System.Diagnostics.Process einbinden? Denn wenn ich im Programm-Code alleine date verwenden möchte, kennt das Programm den Befehl nicht. Mein Ziel wäre es nämlich die Red Brick Zeit anhand von integer Variablen zu setzen. Zum Beispiel: int stunde = 12; int minute = 5; int sekunde = 12; Diese Daten dann neu als Red Brick Zeit setzen. Vielen Dank.😊
Geschrieben August 22, 2019 at 12:4122. Aug 2019 Process kannst du verwenden, wie hier beschrieben. In deinem Fall müsste myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; stattdessen myProcess.StartInfo.FileName = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stunde, minute, sekunde); (o.Ä.) sein.
Geschrieben August 22, 2019 at 15:2522. Aug 2019 Was gerade noch aufgefallen ist: Datum/Zeit zu setzen geht nur mit Root-Rechten. Du kannst aber dem Standarduser (also tf) erlauben, das ohne Root-Passwort zu tun, in dem du auf der seriellen Konsole des RED-Brick einmalig folgenden Befehl ausführst: echo 'tf ALL=(root) NOPASSWD: /bin/date' | sudo tee -a /etc/sudoers Wenn du dann in deinem Programm /bin/date durch /usr/bin/sudo /bin/date ersetzt, sollte es klappen.
Geschrieben August 22, 2019 at 17:5422. Aug 2019 Autor Danke für die Infos. Hab jetzt einmalig den Befehl: echo 'tf ALL=(root) NOPASSWD: /bin/date' | sudo tee -a /etc/sudoers auf der Red Brick Serial Consol ausgeführt. Zusätzlich habe ich in meinem Code folgende Zeilen geschrieben: using (Process myProcess = new Process()) { //myProcess.StartInfo.UseShellExecute = false; myProcess.StartInfo.FileName = String.Format("/usr/bin/sudo /bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund); //myProcess.StartInfo.CreateNoWindow = true; myProcess.Start(); } Die auskommentierten Zeilen brauch ich ja nicht oder? Bei diesem Programm kommt jedenfalls immer ein Fehler beim Aufrufen von myProcess.Start(); Wenn ich diesen Befehl weglasse, wird zwar das Programm ausgeführt jedoch wird die Zeit nicht verändert. (Die Bibliotheken using System; using System.Diagnostics; using System.ComponentModel; habe ich oben in mein Programm eingebunden) Macht ja nichts, dass ich diesen Programmtext erst mitten in meinem Code geschrieben habe oder? Vielen Dank für weitere Hilfe :)
Geschrieben August 23, 2019 at 07:5023. Aug 2019 Was für eine Fehlermeldung bekommst du, wenn du myProcess.Start(); aufrufst?
Geschrieben August 23, 2019 at 17:2923. Aug 2019 Autor Der nachfolgende Fehler tritt dann auf wenn die myProcess.Start() aufgerufen wird.continuous_stdout.log
Geschrieben August 26, 2019 at 07:5226. Aug 2019 Ah, manchmal ist man einfach betriebsblind, sorry dafür. Das Problem ist, dass StartInfo den Namen der ausführbaren Datei und die Argumente getrennt will, da ja auch keine Shell benutzt wird (deshalb optionalerweise UseShellExecute = false). So funktioniert es bei mir: using (Process myProcess = new Process()) { myProcess.StartInfo.FileName = "/usr/bin/sudo"; myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund); myProcess.Start(); }
Geschrieben August 26, 2019 at 16:1226. Aug 2019 Autor Ja jetzt läufts, vielen herzlichen Dank Falls ich den Tag, Monat und Jahr ebenfalls noch als integer Variable zu Anpassung der Red Brick Zeit verwenden würde, wie würde sich da die Zeile: myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund); noch ändern?
Geschrieben September 1, 2019 at 16:361. Sep 2019 Autor Hallo, könnte mir bitte jemand noch bei der Anpassung der Zeit mit der Berücksichtigung der Jahreszahl, Monatsangabe und Anzahl des Tages als integer Variabel helfen. Ich weiß nicht genau wie ich die Zeile myProcess.StartInfo.Arguments dementsprechend abändern muss, dass ich diese drei Variablen auch vorgeben kann. Vielen herzlichen Dank im Voraus😊👍
Geschrieben September 2, 2019 at 09:072. Sep 2019 Dafür musst du die Teile in dem Datumsstring auch durch Platzhalter ersetzen, die du dann mit String.Format einsetzt, z.B so: myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"{0:00} {1} {2:0000} {3:00}:{4:00}:{5:00}\"", jahr, monat, tag, stunde, minute, sekunde); Den Monat musst du als String reingeben, also z.b. AUG oder SEP. Alternativ kannst du dir mal die anderen Formate ansehen, die date versteht, die sind z.B. hier dokumentiert.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.