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!
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
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
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!
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.
;o)
:-P
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?
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
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?
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
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.
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
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. :)
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?