Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Programm ohne Bildschirmausgabe

Yves3 / 13 Antworten / Baumansicht Nickles

Hallo

Ich möchte ein Programm über den Scheduler von Windows in gewissen Zeitabständen ausführen lassen. Dieses Programm braucht keine Bildschirmausgabe.
Zuerst klang das vollkommen klar, jetzt habe ich aber bemerkt, dass mir da teilweise das Verständnis noch ein bisschen fehlt.
Gibt es überhaupt so etwas wie ein "fenster- oder konsolenloses" Programm? Ich meine bei Fenstern ist ja klar, dass da gewisse Bibliotheken zum Zeichnen der Fenster etc. benötigt werden. Bei der Konsole braucht man Funktionen für die Ausgabe in die Konsole, die Konsole an sich wird aber nicht explizit vom Programm aus gestartet (jedenfalls nicht von meinem eigenen Code).
Ist es eventuell bei Windows einfach per Konvention so, dass für Programme ohne Ausgabe ein Konsolenfenster geöffnet wird, oder gibt es tatsächlich so etwas wie ein konsolenloses und fensterloses Programm?
Wie muss ich das in meinem Fall realisieren?
Ach ja, es geht um C# und Visual Studio .NET 2005.

Vielen Dank schon mal im Voraus!

bei Antwort benachrichtigen
d-oli Yves3 „Programm ohne Bildschirmausgabe“
Optionen
Gibt es überhaupt so etwas wie ein "fenster- oder konsolenloses" Programm?
Ja, klar. Fenster und Konsole dienen blos als Schnittstelle zu Deinem Progi, um Ein- und Ausgaben zu machen.

Willst Du z.B. die Datei dummy.txt in C:\temp löschen wenn diese vorhanden ist, prüft das Progi blos, ob diese vorhanden ist, wenn ja, wird sie gelöscht. Progi anklicken, Ende.

Willst Du aber eine X beliebige Datei, in einem x belibigen Ordner löschen, brauchst du dazu Parameter. So z.B.:

C:\myProgis\DateiLoeschen -name "xyz.txt" -dir "C:\tmp"

War es das, was Du wissen wolltest?

d-oli
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Yves3 d-oli „ Ja, klar. Fenster und Konsole dienen blos als Schnittstelle zu Deinem Progi, um...“
Optionen
War es das, was Du wissen wolltest?
Teilweise.


Ich hatte die Gelegenheit, hier jemanden schnell zu fragen.
Demnach öffnet Windows immer eine Konsole bei Programmen ohne Fenster.
Das macht aber bei mir nichts, da man
1. Das Programm vom Scheduler als "nicht interaktiv" starten lassen kann
2. Das Programm sowieso von einem speziellen User für automatisierte Prozesse gestartet wird und die Ausgabe also nur bei dem erscheinen würde.

Somit hat sich die Frage für mich erledigt. Trotzdem Danke für die Antwort!
bei Antwort benachrichtigen
REPI Yves3 „ Teilweise. Ich hatte die Gelegenheit, hier jemanden schnell zu fragen. Demnach...“
Optionen
Demnach öffnet Windows immer eine Konsole bei Programmen ohne Fenster.

Nein, das ist nicht so !
Wie d-oli schon schrieb, kann man sehrwohl ein Programm erstellen, welches Aktionen tätigt (quasi im Hintergrund) ohne das dieses in irgendeiner Form auf dem Bildschirm erscheinen.

Erstelle z.B mal ein Script per WSH, dieser wird immer ohne Fensterausgabe seinen Dienst still im Hintergrund verrichten, wenn Du nicht explizit eine Ausgabe z.b in Form einer Inputbox oder msgbox o.ä. reinbaust.


Es empfiehlt sich immer, etwas Linux im Hause zu haben.
bei Antwort benachrichtigen
peterson REPI „ Nein, das ist nicht so ! Wie d-oli schon schrieb, kann man sehrwohl ein...“
Optionen

;o)

bei Antwort benachrichtigen
d-oli peterson „oder eine Fehlermeldung kommt.“
Optionen

:-P

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Yves3 REPI „ Nein, das ist nicht so ! Wie d-oli schon schrieb, kann man sehrwohl ein...“
Optionen

Naja ich meinte wenn man mit C# ein simples Programm erstellt und sich nicht weiter um die Ausgabe kümmern möchte.
Natürlich ist es irgendwie möglich, das ist aber dann mit mehr Aufwand verbunden... oder sehe ich das falsch?

bei Antwort benachrichtigen
d-oli Yves3 „Naja ich meinte wenn man mit C ein simples Programm erstellt und sich nicht...“
Optionen
Natürlich ist es irgendwie möglich, das ist aber dann mit mehr Aufwand verbunden... oder sehe ich das falsch?
Ich bin kein C# Kenner. Aber siehe mal folgendes:

class MainClass
{
   static void Main()
   {
      int i;
      i = 5 + 1;
   }
}

Will ich nun wissen was in "i" steht, müsste ich das noch ausgeben = Mehraufwand.
Lese ich aber Daten aus einer Datei und die Datei ist nicht vorhanden, könnte es sein, dass eine Fehlermeldung erscheint oder geloggt wird. Diese dann abzufangen um nicht auszugeben = Mehraufwand.

Ich würde mal sagen: "Es kommt darauf an ... Auch auf die Programmiersprache ..."

Gruss
d-oli
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Yves3 d-oli „ Ich bin kein C Kenner. Aber siehe mal folgendes: class MainClass static void...“
Optionen

Genau bei einem Programm in dem Stil habe ich es auch ausprobiert. Keine Ausgaben, nichts.
Beim Doppelklicken auf die Exe öffnete sich trotzdem eine Konsole.
Schaffst du es, den von dir geposteten Code auf Windows ohne irgendwelche Tricks zum Laufen zu bringen, ohne, dass ein Konsolenfenster erscheint?

bei Antwort benachrichtigen
d-oli Yves3 „Genau bei einem Programm in dem Stil habe ich es auch ausprobiert. Keine...“
Optionen

Ne, leider nicht , ich habe keine C# Entwicklungsumgebung.

Nur so aus Neugier, schliesst sich die Konsole wieder von selber?

Was ich bieten kann ist ein VBScript (WSH) das eine Datei löscht, da erscheint asolut nichts. Aber, ist die Datei nicht vorhanden, erscheint eine Fehlermeldung:


'Dateiname: dummy_txt_loeschen.vbs

Set fs = CreateObject("Scripting.FileSystemObject")
set f = fs.GetFile( "D:\tmp\dummy.txt" )

f.Delete

VBScript ist allerdings eine interpretierte Sprache, desshalb vermutlich auch keine Konsole, kein Fesnter etc. Es ginge aber auch mit Konsole, das müsste allerdings programmiert werden.

Sag mal, eine EXE mit C#? Kann man mit C# denn nicht auch Intermediate-Code erzeugen, der zu Laufzeit übersetzt wird? So ähnlich wie der Byte-Code bei Java?

d-oli

EDIT: Habe es eben gelesen ... ;-)
Common Runtime Engine
Programming languages on the .NET Framework compile into an intermediate language known as the Common Intermediate Language, or CIL (formerly known as Microsoft Intermediate Language, or MSIL). In Microsoft's implementation, this intermediate language is not interpreted, but rather compiled in a manner known as just-in-time compilation (JIT) into native code. The combination of these concepts is called the Common Language Infrastructure (CLI), a specification; Microsoft's implementation of the CLI is known as the Common Language Runtime (CLR).

Quelle: http://en.wikipedia.org/wiki/.NET_Framework

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Yves3 d-oli „Ne, leider nicht , ich habe keine C Entwicklungsumgebung. Nur so aus Neugier,...“
Optionen
Nur so aus Neugier, schliesst sich die Konsole wieder von selber?
Ja.

Was ich bieten kann ist ein VBScript (WSH) das eine Datei löscht, da erscheint asolut nichts.
Ja, mit VBScrit habe ich auch schon Sachen gemacht und da wurde auch nie eine Konsole dafür gestartet.

Ich frage mich, ob es etwas damit zu tun hat, dass ich ein "Konsolenprojekt" verwendet habe.
Das andere mögliche Projekte wäre dann mit einem Fenster. Soviel ich weiss sollte das aber eigentlich nichts damit zu tun haben.
bei Antwort benachrichtigen
d-oli Yves3 „ Ja. Ja, mit VBScrit habe ich auch schon Sachen gemacht und da wurde auch nie...“
Optionen
Ich frage mich, ob es etwas damit zu tun hat, dass ich ein "Konsolenprojekt" verwendet habe.
Ich denke schon - gleich wie bei Visual C++ 6 (nicht negativ gemeint).

Ev. funktioniert es als Hintergrundprozess:
http://msdn2.microsoft.com/en-us/library/system.componentmodel.backgroundworker(vs.80).aspx

Ev. kannst Du da sogar irgenwelche Projekteinstellungen vornehmen damit die Konsole nicht erscheint.

Ich komme halt mehr von der Seite ( http://pronix.linuxdelta.de/C/Linuxprogrammierung/index.shtml ), was das Programmieren betrifft.

Gruss
d-oli
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Yves3 d-oli „ Ich denke schon - gleich wie bei Visual C 6 nicht negativ gemeint . Ev....“
Optionen
Ev. kannst Du da sogar irgenwelche Projekteinstellungen vornehmen damit die Konsole nicht erscheint.
Tatsächlich! Ich kann unter "Application->Output type" den Typ "Windows Application" wählen. Ich muss also zuerst ein "Konsolenprojekt" erstellen und dann den Typ auf Windows Application umstellen. Wenn ich direkt ein Windows Application Projekt mache würde, dann müsste ich zuerst wohl noch irgendwie "das Fenster wegkriegen".

So klappt es auch ohne Konsolenfenster. :)
bei Antwort benachrichtigen
xafford Yves3 „ Ja. Ja, mit VBScrit habe ich auch schon Sachen gemacht und da wurde auch nie...“
Optionen
Ich frage mich, ob es etwas damit zu tun hat, dass ich ein "Konsolenprojekt" verwendet habe.

Ja, damit hat es definitiv zu tun.Erstelle mal ein leeres Projekt (oder lösche alle Referenzen und vom der IDE eingefügten Code). Da schreibst Du folgendes hinein:



namespace test
{

public class Invisible
{

public static void Main(string[] args)
{

int i = 0;

while ( i {
++i;
}

}

}

}



Das kompilierst Du dann und rufst es auf... dabei sollte keinerlei Ausgabe oder sonst irgendeine Anzeige erscheinen.

PS: Was willst Du überhaupt machen?
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen