Prog automatisch in Autostart
-
Hier habe ich die Holzhammermethode beschrieben, die eigentlich für Visual Basic Programme gedacht ist, weil die nicht als Dienst zu programmieren sind:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-133664Bei dieser Methode gibt es keine saubere Kommunikation zwischen Diensteverwaltung und Programm, beim Beenden des Dienstes wird dann z. B. einfach der Kill-Befehl an deine Anwendung geschickt.
Wenn du es ordentlich machen willst, programmierst du den Dienst selber.
-
wie sieht es da eigentlich mit Treibern usw. aus?
sind da die Treiber schon alle geladen oder werden die erst durch die Benutzeranmeldung geladen?
ich brauch nämlich die serielle und ein CAN-Gerät welches über nen Treiber angesprochen wird.
mfg
Tom
-
Das sollte eigentlich über die Abhängigkeit der Dienste lösbar sein. Wenn die benötigten Treiber nicht als Dienst laufen, kann man auch einen Dienst nehmen, der relativ spät gestartet wird und die Abhängigkeit darauf setzen. (EDIT: Wenn ich mich richtig erinnere, dann wurde dafür der Druckspooler empfohlen.) Das habe ich mal als Tipp gelesen, aber noch nicht ausprobiert.
-
wie geht es denn mit dem in den autostart ordner eintragen?
-
Hallo
du läßt einen Registry-Wert in HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run anlegen, vom Typ String, als Namen einen frei wählbaren Namen für dein Programm und als Wert den absoluten Pfad zu deinem Programm.
bis bald
akari
-
Ich meine in Alle programme->Autostart
also ohne Registry
-
Eine Verknüpfung zu dem Programm im Autostart-Ordner anlegen.
Einfacher ist aber:
String awpath=Application->ExeName; TRegistry& regkey=*new TRegistry(); regkey.RootKey=HKEY_LOCAL_MACHINE; bool keygood=regkey.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false); regkey.LazyWrite=false; if(keygood) { regkey.WriteString("Dein Programm",awpath); } regkey.CloseKey(); delete ®key;
-
naja ok wenns einfacher ist

wie kann man das programm dann wieder aus den autostart entfernen?
-
TRegistry& regkey=*new TRegistry(); regkey.RootKey=HKEY_LOCAL_MACHINE; bool keygood=regkey.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false); regkey.LazyWrite=false; if(keygood) { regkey.DeleteValue("Dein Programm"); } regkey.CloseKey(); delete ®key;
-
Wo finde ich TRegistry?
lol
-
Header includen
#include <registry.hpp>Genau sowas steht perfekt in der Hilfe beschrieben.
Gruss
-
regkey.WriteString("Dein Programm",awpath);
bei "Dein programm" muss nicht irgendein Pfad oder sowas oder?
Einfach nur "abc"?
-
Hallo
der vollständige Pfad ist in der Variablen awpath drin.
Das andere ist nur ein beliebiger Name, der angezeigt wird.bis bald
akari
-
Hi Leute,
hab das so gemacht wie damals schon diskutiert und lief bis vor kurzem auch alles wunderbar, nur musste ich jetzt plötzlich feststellen, dass mein Programm, an dem sonst keinerlei Änderungen ausser die mit dem Autostart drin ist, nun plötzlich die ganzen Einstellungsdateien nicht mehr findet und immer bei null beginnt.
Beende ich das Programm und starte es dann neu, gehts super.
Auch wenn ich den Regedit Autostart rausnehme und klassisch eine Verknüpfung unter START->Autostart reinkopier gehts auch super.habt ihr eine Ahnung? verhält sich als Admin genauso wie als User, der Regedit Key ist unter HKEY_LOCAL_MACHINE.
mfg
Tom
-
Hallo,
Normalerweise hat ein NichtAdmin keine Schreibrechte in HKEY_LOCAL_MACHINE. Der Admin kann sowas natürlich ändern.
-
Ok, danke mal für den Hinweis, aber eigentlich geht darum, dass das Programm, egal unter welche Rechten, sobald es aus der Registry gestartet wird, die gespeicherten Einstellungen nicht liest und von null anfängt.
-
Hallo
vermutlich weil beim Start durch die Registry der Arbeitspfad nicht korrekt gesetzt ist, und du sicher auf Konfig-Dateien zugreifst die im Pfad des Programms liegen.
Dann würde es helfen, wenn du beim öffnen der Konfig-Dateien nicht einfach "config.dat" angibst, sondernExtractFilePath(Application->ExeName) + "config.dat"um einen absoluten Pfad zu bekommen.
bis bald
akari
-
Hi, danke mal für den super Tipp, hat mir schon sehr weitergeholfen, jetzt hab ich aber noch ein Problem:
kann ich das ganze auch folgendermaßen machen:
#define SETUP_FILE ExtractFilePath(Application->ExeName)+"setup.txt"bei mir gehts nämlich nicht bei allen ifstreams und ofstreams bekomme ich folgende Fehler:
Keine Übereinstimmung für ifstream::basic_ifstream(AnsiString) gefunden,
oder
Keine Übereinstimmung für ofstream::basic_ofstream(AnsiString) gefundenKann mir da jemand weiterhelfen?
mfg Tom
-
Hallo
Du solltzest ohne wirklich guten Grund in C++ kein define benutzen. Vor allem wenn es dir wie hier gar nichts bringt.
DIe Fehlermeldung besagt nur, das ifstream einen const char* erwartet, also gibst du es ihm
AnsiString setupfile = ExtractFilePath(Application->ExeName) + "setup.txt"; ifstream stream(setupfile.c_str());bis bald
akari