Entwickler-Ecke

Sonstiges (Delphi) - anwendung soll nichts tun


Jakob Schöttl - Mi 19.03.08 00:20
Titel: anwendung soll nichts tun
Hallo,
ich hab ein unsichtbares programm, dass öffnet am Anfang eine Datei, und soll dann aber die ganze Zeit nichts tun, nur weiter "laufen".

also möglichst wenig prozessorleistung brauchen.

wie soll ich das machen? mit einer While-Schleife und Sleep? oder gibts was besseres?


Narses - Mi 19.03.08 00:25

Moin!

Was für ein Typ von Anwendung ist denn das? Eine VCL oder eine Konsolen-Anwendung?

cu
Narses


Xentar - Mi 19.03.08 00:29

Wenn die Anwendung "nichts" tun soll, dann schreib halt "nichts" hin.. also keine Schleife, kein sleep, einfach laufen lassen.


Narses - Mi 19.03.08 00:31

Moin!

user profile iconXentar hat folgendes geschrieben:
Wenn die Anwendung "nichts" tun soll, dann schreib halt "nichts" hin.. also keine Schleife, kein sleep, einfach laufen lassen.
Das ist dann die Lösung für eine VCL-Anwendung. ;)

Fragt sich, ob es eine Konsolen-Anwendung ist? :gruebel:

cu
Narses


Xentar - Mi 19.03.08 00:44

bei einer Konsolenanwendung reicht doch ein einfaches ReadLn; oder so ähnlich? Oder wie war das noch?


Jakob Schöttl - Mi 19.03.08 01:02

ich würde weder noch machen (ohne GUI): im projektquellcode einfach:


Delphi-Quelltext
1:
2:
3:
4:
program pn;
begin
  //irgendwas
end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


.#R4id - Mi 19.03.08 03:39

Ich versteh das nicht.

Egal was für ein Anwendungs-Typ du hast, einfach zu begin des Programms die Datei laden.
Und sonst nichts.

Oder seh ich das falsch? :gruebel:


DelphiMarkus - Mi 19.03.08 10:10

Zitat:
bei einer Konsolenanwendung reicht doch ein einfaches ReadLn; oder so ähnlich? Oder wie war das noch?


Das sollte eigentlich reichen, weil das Programm dann ja auf das nächste ENTER wartet.
(Das war noch richtig schön als ich 2006 mit Programmieren angefangen habe (TurboPascal 7) ;) )


Delete - Mi 19.03.08 11:15

Wenn der Threadersteller uns über den tieferen Sinn aufklären würde, könnte man eventuell sogar helfen.

[Glaskugelmodus an]Er will die Datei exklusiv öffnen, um so zu verhindern, dass sie von einem anderen Programm geöffnet werden kann.[Glaskugelmodus aus]


BenBE - Mi 19.03.08 11:31

Man nehme SuspendThread ... Schon nicht nur resourcen, sondern das Programm macht danach wirklich nix mehr ... Nun noch ein while true do eine Zeile davor und ne Prüfung ob Windows auch nicht grad runterfährt ... Siehe da ... Das Programm macht nix mehr ...

@Luckie ... das denk ich mal auch ... Kann aber theoretisch sogar in die Kategorie Scherzprogramme fallen, weil sauber beendet werden kann es bei nahezu keiner Variante mehr ...


Jakob Schöttl - Mi 19.03.08 15:07

Naja, sorry, ich erkläre jetzt mal, für was ich das programm genau brauche:

bei jedem AntiVir-Update wird avnotify.exe gestartet; Das zeigt nur Werbung an, und ich will das nicht haben. Löschen der exe hilft nichts, weil sie immer wieder neu erzeugt wird.

Deswegen will ich ein unsichtbares Programm, dass die Datei Exklusiv öffnet, dann kann der Updater sie nicht mehr starten.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
program avnotify_besetzer;
uses ...;
var fs: TFileStream;
begin
  fs := TFileStream.Create('avnotify.exe',fmShareExclusive);

  //möglichst wenig tun, aber erst beim Herunterfahren beendet werden.

end;

ich will eben, dass das prog keine gui hat, weder konsole, noch fenster.

Vielleicht könnt ihr mir jetzt besser helfen.


jaenicke - Mi 19.03.08 18:34

Hast du einmal versucht einfach die Rechte so zu setzen, dass kein Zugriff möglich ist? Es könnte sein, dass dann eine Fehlermeldung kommt, dies wäre dann aber auch bei deiner Variante der Fall.

Und btw. ist das der Grund weshalb ich die kostenlose Version von AntiVir nicht mehr einsetze, ich nehme jetzt AVG Free, da gibt es die Probleme schlicht nicht. Und auf 2 PCs nutze ich ein kommerzielles Produkt, aber das wäre für alle zu teuer.


Xentar - Mi 19.03.08 18:42

Welche "Probleme"?
Dass man einmal am Tag dieses Fenster wegklicken muss?


Martok - Mi 19.03.08 18:46

+25 Meldungen von der Firewall, weil hier nicht jeder ins Internet darf.

Bin übrigens auch bei AVG gelandet, auch wenn das an dem absolut miesen Release der 7er Antivir lag. Und ohne Signaturupdates brauch ich auch keinen Virenscanner, die hätte man damals ja aber nicht mehr gekriegt.


Jakob Schöttl - Mi 19.03.08 22:18

user profile iconjaenicke hat folgendes geschrieben:
Hast du einmal versucht einfach die Rechte so zu setzen, dass kein Zugriff möglich ist? Es könnte sein, dass dann eine Fehlermeldung kommt, dies wäre dann aber auch bei deiner Variante der Fall.

einmal hab ichs bis jetzt probiert, und da war keine Fehlermeldung von AntiVir...


Yogu - Mi 19.03.08 23:52

user profile iconMartok hat folgendes geschrieben:
+25 Meldungen von der Firewall, weil hier nicht jeder ins Internet darf.

Schonmal was von "Für diese Anwendung speichern" oder so gehört?

user profile iconJakob Schöttl: Du könntest auf die WM_ENDSESSION reagieren.


Hidden - Do 20.03.08 00:01

user profile iconJakob Schöttl hat folgendes geschrieben:
Naja, sorry, ich erkläre jetzt mal, für was ich das programm genau brauche:

bei jedem AntiVir-Update wird avnotify.exe gestartet; Das zeigt nur Werbung an, und ich will das nicht haben. Löschen der exe hilft nichts, weil sie immer wieder neu erzeugt wird.

Deswegen will ich ein unsichtbares Programm, dass die Datei Exklusiv öffnet, dann kann der Updater sie nicht mehr starten.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
program avnotify_besetzer;
uses ...;
var fs: TFileStream;
begin
  fs := TFileStream.Create('avnotify.exe',fmShareExclusive);

  //möglichst wenig tun, aber erst beim Herunterfahren beendet werden.

end;

ich will eben, dass das prog keine gui hat, weder konsole, noch fenster.

Vielleicht könnt ihr mir jetzt besser helfen.


geile Idee, das nervt mich auch immer...

Edit: Komisch, Beim ausführen von avnotify.exe passiert nichts, vermutlich nur in kombination mit dem Update. Dafür bekomme ich eine Datei(Suche) angezeigt, AVNOTIFY.EXE-22AE9451.pf in C:\WINDOWS\prefetch. Prefetch heißt frei übersetzt "vor dem Abruf".Hat das was mit der ganzen Sache zu tun?


Xentar - Do 20.03.08 00:43

Ich denke mal, der Anwendung muss ein Parameter mitgegeben werden, damit sie was anzeigt. Und wenn du diesen nicht kennst, kannst du sie noch so oft per Hand starten ;)
Und Prefetch ist eine funktion von Windows, häufig benutzte Programme zwischenzuspeichern, damit diese schneller starten.

Und das mit der Firewall versteh ich noch nicht ganz. Jeder Virenscanner braucht doch tägliche Updates - wieso ist das also ein Kritikpunkt von AntiVir?

BTW: Hab letztlich gelesen (glaub auf Heise?), dass in einigen Wochen die AntiVir 8 rauskommen soll, und die dafür extra die Bandbreite der UpdateServer erhöht haben.


Hidden - Do 20.03.08 10:54

user profile iconXentar hat folgendes geschrieben:
Ich denke mal, der Anwendung muss ein Parameter mitgegeben werden, damit sie was anzeigt. Und wenn du diesen nicht kennst, kannst du sie noch so oft per Hand starten ;)
Und Prefetch ist eine funktion von Windows, häufig benutzte Programme zwischenzuspeichern, damit diese schneller starten.

Und das mit der Firewall versteh ich noch nicht ganz. Jeder Virenscanner braucht doch tägliche Updates - wieso ist das also ein Kritikpunkt von AntiVir?

BTW: Hab letztlich gelesen (glaub auf Heise?), dass in einigen Wochen die AntiVir 8 rauskommen soll, und die dafür extra die Bandbreite der UpdateServer erhöht haben.


Das Update ist nicht das Problem. Bei jedem Update geht nur immer Werbung auf.


Delete - Do 20.03.08 11:02

user profile iconJakob Schöttl hat folgendes geschrieben:
Naja, sorry, ich erkläre jetzt mal, für was ich das programm genau brauche:

bei jedem AntiVir-Update wird avnotify.exe gestartet; Das zeigt nur Werbung an, und ich will das nicht haben. Löschen der exe hilft nichts, weil sie immer wieder neu erzeugt wird.

Deswegen will ich ein unsichtbares Programm, dass die Datei Exklusiv öffnet, dann kann der Updater sie nicht mehr starten.

Dann kauf das Produkt oder nimm einen anderen Virenscanner. Der Virenscanner wird dir imemrhin kostenlos angeboten, ist es da zu viel verlangt einmal kurz die Werbung wegzuklicken? Stell dir vor alle wären so wie du, dann gäbe es solche Angebote nicht mehr.


Hidden - Do 20.03.08 11:47

user profile iconLuckie hat folgendes geschrieben:
user profile iconJakob Schöttl hat folgendes geschrieben:
Naja, sorry, ich erkläre jetzt mal, für was ich das programm genau brauche:

bei jedem AntiVir-Update wird avnotify.exe gestartet; Das zeigt nur Werbung an, und ich will das nicht haben. Löschen der exe hilft nichts, weil sie immer wieder neu erzeugt wird.

Deswegen will ich ein unsichtbares Programm, dass die Datei Exklusiv öffnet, dann kann der Updater sie nicht mehr starten.

Dann kauf das Produkt oder nimm einen anderen Virenscanner. Der Virenscanner wird dir imemrhin kostenlos angeboten, ist es da zu viel verlangt einmal kurz die Werbung wegzuklicken? Stell dir vor alle wären so wie du, dann gäbe es solche Angebote nicht mehr.


Da kommen wir jetzt aber auf den kategorischen Imperativ und damit die moralische Frage hinter dem Wegdrücken von Werbung zu sprechen und werden damit (wie so gerne immer wieder spontan im Delphi-Forum :wink: )
[OT]

[/OT]

mfG,


jaenicke - Do 20.03.08 14:03

user profile iconLuckie hat folgendes geschrieben:
Dann kauf das Produkt oder nimm einen anderen Virenscanner. Der Virenscanner wird dir imemrhin kostenlos angeboten, ist es da zu viel verlangt einmal kurz die Werbung wegzuklicken? Stell dir vor alle wären so wie du, dann gäbe es solche Angebote nicht mehr.
Richtig, wobei die Werbung an sich nicht das war, was mich zum Wechsel zu AVG gebracht hat. Das Problem war, dass der Updater sich mehrmals hintereinander in den Vordergrund geschoben hat. Und das nervt tierisch.
Bei AVG kommt auch eine Update-Meldung, die stört aber nicht das was ich gerade tue. Dass da auch keine Werbung dabei ist, ist ein angenehmer Nebeneffekt.


Jakob Schöttl - Do 20.03.08 14:12

user profile iconYogu hat folgendes geschrieben:
user profile iconJakob Schöttl: Du könntest auf die WM_ENDSESSION reagieren.

Aber das geht ja nur, wenn ich eine Nachrichtenschleife habe, so wie TApplication oder?


jaenicke - Do 20.03.08 14:19

Eine Nachrichtenschleife musst du natürlich haben, wenn du irgendetwas vom System mitbekommen willst. Wie du die implementierst siehst du in den nonVCL Tutorials von Luckie [http://www.delphi-library.de/topic_Win32APITutorials+nonVCL_17071.html].


elundril - Do 20.03.08 14:25

welches Antivir hast du?? bei uns läuft auch antivir und das blendet nie werbung ein.

lg elundril


jaenicke - Do 20.03.08 14:27

In der letzten Version, die ich hatte, konnte ich mich daran auch nicht erinnern, aber das Update-Fenster hat sich eben immer in den Vordergrund gedrängt.
Auf einem anderen PC in meiner alten Schule war aber zu dem Zeitpunkt noch Werbung zu sehen, keine Ahnung wo da der Unterschied ist.


elundril - Do 20.03.08 14:29

vielleicht ist das eine die personal edition und das andere nicht??

lg elundril


jaenicke - Do 20.03.08 14:32

Von Antivir habe ich nur auf einem PC nicht die kostenlose Version gehabt, aber auf beiden angesprochenen lief die selbe kostenlose Version. Und was die Version angeht: die sollte ja vom Updater aktuell gehalten werden. OS war beides XP (das ich jetzt nur noch auf diesem älteren PC zum energiesparenden Surfen benutze^^).

PC: Ich nehm nen Virtual PC und probiers aus ;-).


Narses - Do 20.03.08 15:15

Moin!

In diesem Topic geht´s nicht darum, wer warum welchen Virenscanner einsetzt. :| Bitte zurück zum Thema! ;)

cu
Narses


Raffo - Do 20.03.08 19:38

Ich hab seinerseit das Werbefenster einfach mit einem simplen Aufruf von


Delphi-Quelltext
1:
2:
3:
x:=findwindow(nil,'fenstertilel der werbung'); //ist bei avira immer gleich
if x>0 then
   sendmessage(x,wm_close,0,0);


ausgeblendet. Da die Kaufversion für schlappe 20 EUR pro Jahr einen echten Mehrwert bringt und eben auch keine Werbung, konnte ich auf mein Progrämmchen verzichten.


Jakob Schöttl - Fr 21.03.08 12:24

user profile iconjaenicke hat folgendes geschrieben:
Eine Nachrichtenschleife musst du natürlich haben, wenn du irgendetwas vom System mitbekommen willst. Wie du die implementierst siehst du in den nonVCL Tutorials von Luckie [http://www.delphi-library.de/topic_Win32APITutorials+nonVCL_17071.html].

das ist ein guter tipp; ich würde dann die Schleife so lange laufen lassen bis WM_ENDSESSION kommt.

Aber hoffentlich nimmt er mir dann nicht zu viel prozessorleistung weg.

user profile iconRaffo hat folgendes geschrieben:
Ich hab seinerseit das Werbefenster einfach mit einem simplen Aufruf von


Delphi-Quelltext
1:
2:
3:
x:=findwindow(nil,'fenstertilel der werbung'); //ist bei avira immer gleich
if x>0 then
   sendmessage(x,wm_close,0,0);

aber dazu müsste ich ja den aufruf in einer schleife machen, da ist glaube ich die erste version ressourcen-sparender.


Hidden - Fr 21.03.08 14:58

schonmal probiert, ein leeres Programm gleichen Namens an die Stelle zu setzen?