Programm ohne Form?

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    Programm ohne Form?

    Moin,
    wie kann ich ein Programm ohne Form schreiben? Also das es komplett im Hintergrund ist?
    Ich kann zwar im Form Load auf Me.Hide stellen, jedoch flackert das dennoch immer kurz auf, das möchte ich nicht.

    Kann einer Helfen?

    Grüße
    Da gibt es viele Möglichkeiten:

    1. Einen Dienst Programmieren
    2. Eine Shell Extension Programmieren
    3. Erstell mit Visual Studio ein "Leeres Projekt" und Füge dann eine Klasse hinzu, über die das Projekt gestartet werden soll.

    MfG, Basti
    Hallo!

    Ich weis, die Frage ist schon etwas älter.
    Jedoch stehe ich als Einsteiger nun vor dem selben Problem.
    In VB6 hatte ich die Prozedur "main" in einem Modul untergebracht und die Anwendung hat dort gestartet.
    Dort habe ich dann die einzelnen Initialisierungen vorgenommen und entsprechende Forms gestartet.

    Wenn ich in VB2012 nun den Anwendungstyp auf "Windows Form" stelle, dann kann ich nur eine Form als Startobjetk definieren.
    Das möchte ich nicht.

    Der Umweg den Anwendungstyp auf "Windows-Dienst" zu stellen, finde ich auch nicht ganz korrekt.
    Bei meiner Software handelt es sich ja um keinen Dienst. Oder ist das egal?


    Folgende Vorgangsweise habe ich auch nicht wirklich verstanden:
    Also, ich hab vor dem Posten nur dein Post gesehen, somit hab ich n' neues Projekt gemacht und eine neue Klasse erstellt
    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26: In Visual Basic wird das von der IDE verborgen. Die Main-Methode gibt's immer noch, nur ist die ein Bisschen versteckt.
    Füge dem Projekt eine Klasse namens "Program" hinzu. Die Klasse kann auch gerne anders heißen, aber ich hab das mal von C# übernommen. Da gibt's auch eine Datei namens Program.cs.
    In dieser Klasse erstellst Du eine Public Shared Sub Main mit einem String()-Argument (also ein String-Array). Das sind die Komanndozeilenparameter, mit der die Anwendung gestartet wird.
    Jetzt gehst Du in die Projekteinstellungen, dann unter "Anwendung" stellst Du das Startobjekt auf "Sub Main" um.
    Wenn Du den Anwendungstyp auf "Konsolenanwendung" stellst, dann sieht man eine Konsole. Bei einer Windows-Forms-Anwendung mit der Main-Methode als Startobjekt gibt's keine Konsole.
    Wenn Du jetzt eine Form anzeigen willst, musst Du Application.EnableVisualStyles() aufrufen, damit die visuellen Stile zugelassen werden. Sonst sehen die Fenster Windows 2000 mäßig aus. Dann instanzierst Du deine Form und rufst Application.Run() mit der Form-Intanz auf.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Danke Niko!

    Das hört sich aber sehr umständlich und wie ein Workaround an.
    Jetzt gehst Du in die Projekteinstellungen, dann unter "Anwendung" stellst Du das Startobjekt auf "Sub Main" um.

    Wenn Du den Anwendungstyp auf "Konsolenanwendung" stellst, dann sieht
    man eine Konsole. Bei einer Windows-Forms-Anwendung mit der Main-Methode
    als Startobjekt gibt's keine Konsole.
    Nur wenn ich bei Anwendungstyp statt "Windows-Forms-Anwendung" etwas anderes auswähle, lässt sich eine Klasse oder ein Modul als Start_Main definieren. Ich habe vorhin versucht das Programm als "Windows-Dienst" zu starten,
    dann habe ich aber das Problem mit dem Aufruf von neuen Forms.

    Ich bin aber auf folgendes draufgekommen - und das funktioniert scheinbar auch:

    1. eine Form als Startform
    2. Im Form_load alles reinpacken was ich möchte und von dort aus alle anderen Forms starten
    3. Me.close schließt die Form bevor sie überhaupt angezeigt wird.

    Somit habe ich immer noch eine Windows-Form Anwendung.

    Mal sehen, ob das so machbar ist.

    LG Roland

    Du erstellst einfach ein neues Modul und dort eine Main-Methode, dann sollte dieses Modul auch als Startobjekt auswählbar sein.
    Dachte ich auch, geht aber unter VB2012 scheinbar nicht. Oder ich übersehe etwas.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26: Hab vergessen zu erwähnen, dass Du das Anwendungsframework deaktivieren musst. Denn das Anwendungsframework übernimmt normalerweise genau das, was Du manuell machen willst. Auch der Mutex, damit das Programm nur einmal gestartet werden kann ("Einzelinstanzanwendung") wird normalerweise vom Anwendungsframework übernommen.
    Und das ist übrigens kein Workaround, sondern genau der Weg, der genommen werden soll.
    Was Du zur Zeit machst, ist ein Workaround. Die Startform sofort wieder abzuwürgen ist nicht sehr sinnvoll.
    Und Du solltest das Form.Load-Event nicht verwenden. Bei 64bit Windows gibt's da Probleme, wenn eine Exception auftritt. Die wird einfach verschluckt. Verwende den Konstruktor der Form (einfach "Public Sub New" eintippen und Enter drücken) oder, wenn's geht, die OnShown-Überschreibung:

    VB.NET-Quellcode

    1. Protected Overrides OnShown(e As ...)
    2. 'Hier Code
    3. 'MyBase.OnShown(e)
    4. End Sub

    Das lässt sich ganz einfach einfügen, indem Du nur "Overrides " und dann den Namen des zu überschreibenden Members eingibst. Dann wird der Rest automatisch eingefügt.
    Im Konstruktor hast Du noch das Problem, dass bei einer Exception nur eine InvalidOperationException angezeigt wird und Du erst im StackTrace der InnerException nachsehen musst, wo die Exception tatsächlich aufgetreten ist. Das sollte bei OnShown nicht passieren, bin mir aber nicht mehr sicher.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Das, was du da gerade machst, ist wohl eher der Workaround, so wie Niko Ortner es erklärt hat, macht man das auch normalerweise.

    Hier nochmal Schritt für Schritt mit Bildern:

    1. Du legst dir ein neues WindowsForms-Projekt an.

    2. Du fügst dem Projekt ein neues Modul hinzu.


    3. In dem Modul erstellst du eine Main-Methode.


    4. Klicke nun im Projektmappenexplorer doppel auf "MyProject", um die Projekteigenschaften zu öffnen.


    5. Dort deaktivierst du dann zunächst das Anwendungsframework, wodurch sich "Startformular" in "Startobjekt" ändert. Dort kannst du dann dein Modul auswählen.
    Super, das hat mal geklappt.

    Und wie aktiviere ich nun wieder die Visuellen Stile?

    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Danke, oft steh ich wirklich auf der Leitung.
    :thumbsup:
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at