Home > C/C++ > Windows Hintergrundprozess mit C

Windows Hintergrundprozess mit C

Diese Projekt laesst sich mit dem Programm nohup unter Linux vergleichen. Zu diesem Thema gibt es bereits einen Artikel von mir: Windows Hintergrundprozess mit Perl ist im Grunde das gleiche Projekt. Diesmal ist es in C geschrieben, statt in Perl.

Perl-Scripte haben natuerlich auch Nachteile. Es muss ueberhaupt Perl installiert sein, um ein Perl-Script auf einem PC starten zu koennen. Ausserdem muessen auch die benoetigten Perl-Module installiert sein.

Die Nachteile des daemon-Scripts in Perl, sind die Vorteiles dieses Projektes. daemon.exe muss nicht extra installiert werden, damit man es verwenden kann. Die Vorkompilierte daemon.exe ist in diesem Projekt sofort einsatzbereit. Genau so wie das Perl-Script, erzeugt auch daemon.exe einen Prozess mit CreateProcess. Die Option DETACHED_PROCESS spielt in beiden Faellen eine Rolle. Diese Option verhindert auch ein CMD Fenster, beim Programm das im Hintergrund rennen soll. In der beigefuegten notepad-daemon.bat Datei ist auch ein Beispiel fuer die Verwendung. Natuerlich macht es beim Editor nicht viel Sinn. Wie beim Beispiel, unten auf dieser Seite, ersichtlich, kann man dem Hintergrundprogramm auch einen oder mehrere Uebergabeparameter mit uebergeben. Das heisst, es koennen nicht mehrere Programme gleichzeitig gestartet werden, sondern immer nur eines. Das soll aber nicht heissen, dass nicht mehrere Programme gleichzeitig im Hintergrund rennen koennen. Im unteren Beispiel ist file.txt ein Uebergabeparameter fuer das Programm notepad.exe.

Wie fast alle Programme oder Scripte die ich programmiere, muss auch dieses in einem CMD-Fenster gestartet werden. Um das Programm von jedem beliegigen Ort ausfuehren zu koennen, kopiert man sich daemon.exe am besten nach C:WindowsSystem32, falls Rechte dafuer vorhanden sind. Anderfalls kann man auch den Pfad zur daemon.exe Datei in die Umgebungsvariable PATH hinzufuegen. Wer beim der daemon.exe selber keine Textausgabe haben will, kann bei den Linkereinstellungen der Dev-C++ IDE Kein Konsolenfenster erzeugen auf Yes setzten, oder beim Kompilieren die Option -mwindows hinzufuegen.

Beispiele fuer die Verwendung

daemon.exe notepad.exe
daemon notepad.exe file.txt

Info zur Kompilierung

Download

Share and Enjoy:
  • Twitter
  • Facebook
  • del.icio.us
  • Google Bookmarks
  • Digg
  • Slashdot
  • StumbleUpon
  • Reddit

TheFox C/C++ , ,

  1. Stefan
    17. Januar 2010, 14:51 | #1

    Hallo,

    vielen Dank für das nützliche Tool.
    Eine Frage habe ich noch: Warum werden Batchdateien nicht ausgeführt?

    Beispiel: Hat man die Datei “test.bat” mit dem Inhalt “dir > out”
    und ruft “daemon.exe test.bat” auf, so passiert nichts, insbesondere wird die Datei out nicht erzeugt. Gibt es einen Workaround?

    Gruß Stefan

  2. 18. Januar 2010, 19:29 | #2

    Hallo,

    das kann ich dir nicht genau sagen. Ich vermute es liegt an den Uebergabeparametern der Funktion CreateProcess(). Vielleicht muss man statt dem ersten Argument nicht NULL reinschreiben, sondern auch den Pfad von dem bat-File.

    http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

    Oder es lassen sich generell keine bat-Files im Hintergrund ausfuehren.

    Greets,
    TheFox

  1. Bisher keine Trackbacks
hacker Powered by Gentoo Linux Blogverzeichnis - Blog Verzeichnis bloggerei.de Suchmaschinenoptimierung mit Ranking-Hits