Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Autostart unter Windows 7 (https://www.delphipraxis.net/167120-autostart-unter-windows-7-a.html)

jodahush 14. Mär 2012 11:50

Autostart unter Windows 7
 
Ich hatte für mein Prog. den Autostart in der Registry ...Run eingetragen.
Leider lässt mich mein Win7 64 nicht mehr in die Registry schreiben.

Das Problem scheint laut Google win7 typisch zu sein.

Wie kann ich also jetzt eine Autostartfunktion implementieren, die auch in Win7 (ich glaube es klappte nur nicht in der 64bit version) läuft?

danke

jaenicke 14. Mär 2012 12:18

AW: Autostart unter Windows 7
 
Du brauchst dort (wie auch unter XP) natürlich Adminrechte. Zudem musst du auf den 64-Bit-Schlüssel zugreifen:
http://www.delphipraxis.net/86651-re...w6432node.html

Bernhard Geyer 14. Mär 2012 12:19

AW: Autostart unter Windows 7
 
Starte mal dein Programm als "Als Administrator ausführen". Schreibzugriff unter HKLM geht nur mal nur mit lokalen Adminrechten. Dein Programm wird also auch unter NT/2000/.. versagen wenn der USer nicht mindestens in der Gruppe "Hauptbenutzer" ist.

Popov 14. Mär 2012 13:55

AW: Autostart unter Windows 7
 
Zitat:

Zitat von jodahush (Beitrag 1156499)
Wie kann ich also jetzt eine Autostartfunktion implementieren

Es gibt mehrere Möglichkeiten der Autostartfunktion. Je nach Art des Programms ist mal die eine oder andere besser. Wenn es ein Portable Programm ist und ich es nicht unter Programme installiere, verwende ich schon mal gerne den Autostartordner des Kontos im Startmenü. Einfache Handhabung und der Benutzer kann es leicht wieder entfernen. Ich hab es zwar nicht unter Windows 7 getestet, aber das sollte wohl ohne Adminrechte gehen. Den gleichen Ordner gibt es in grün unter All Users.

Die zweite Variante ist Registry undter "Software\Microsoft\Windows\CurrentVersion\Run ". Auch hier gibt es zwei Möglichkeiten, den Autostart für Alle und den fürs eigenes Konto. Der erste ist unter HKEY_LOCAL_MACHINE, auf den hat wohl nur der Admin Zugriff, und unter HKEY_CURRENT_USER, hier hast du Schriebrechte (zumindest bei XP).

Also eines davon sollte klappen.

generic 14. Mär 2012 14:38

AW: Autostart unter Windows 7
 
Zitat:

Zitat von jodahush (Beitrag 1156499)
Ich hatte für mein Prog. den Autostart in der Registry ...Run eingetragen.
Leider lässt mich mein Win7 64 nicht mehr in die Registry schreiben.

Wie kann ich also jetzt eine Autostartfunktion implementieren, die auch in Win7 (ich glaube es klappte nur nicht in der 64bit version) läuft?

Für Computerstarts aka hklm kannst du das ohne Adminrechte nicht mehr machen.
Für Userstarts aka hkcu solltest du es machen können.

Popov 14. Mär 2012 14:50

AW: Autostart unter Windows 7
 
Zitat:

Zitat von generic (Beitrag 1156546)
Für Computerstarts aka hklm kannst du das ohne Adminrechte nicht mehr machen.

Ging eigentlich auch vorher nicht, wenn man wie es eigentlich richtig war, nicht als Admin, sondern mit Eingeschränkten Benutzerrechten arbeitete. Viele arbeiteten aber als Admin und merkten es nicht. Dann sagte sich MS - lass die doch als Admin arbeiten wenn sie wollen, aber dann beschneiden wir den Admin. Und jetzt klappt einiges nicht, trotz Admin.

hathor 14. Mär 2012 15:13

AW: Autostart unter Windows 7
 
Bei WIN 7 verwendet man den Taskplaner.

jodahush 17. Mär 2012 10:21

AW: Autostart unter Windows 7
 
sorry, das ich jetzt erst antworte.
Unter Win7 lief meine Standard autostart funktion über die Registry.

2 Meiner Rechner haben aber die 64 Bit version. Die scheint hier anders zu ticken.
Das Thema Registry habe ich im Grunde schon aufgegeben. WOW32 etc. klappt unter win7 aber nicht mit der 64 bit version.

Im Moment versuche ich den Autostart folder zu befüllen.
Aber irgendwie schreibt meine Routine keinen Shortcut. Aber hier bin ich noch nicht 100prozent sicher. Übers Wochenende weiss ich mehr.

jaenicke 17. Mär 2012 18:46

AW: Autostart unter Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang liegt ein kleines Testprogramm. Dieses beinhaltet nur die bereits im Thread genannte Funktionalität.

Das funktioniert bei mir unter Windows XP, 7 und 8 (7 und 8 mit 64 Bit getestet), sowohl als 32-Bit Programm als auch als 64-Bit Programm (beide Versionen liegen zusätzlich zum Quelltext bei). Das Projekt ist für Delphi XE2.

jodahush 17. Mär 2012 22:07

AW: Autostart unter Windows 7
 
zuerst mal vielen Dank für dein Test Program.
Bin gerade dabei es zu starten.

Mit meinen eigenen Versuchen ist es wie verhext. Code der vorher lief, klappt einfach nicht.
Selbst Versuch in den richtigen Autostart Folder einen Shortcut zu legen, schlug fehl. Es wird einfach kein shortcut produziert.

Beim Aufruf deines Programs meckert Delphi, das das Property Elevation nicht da ist.
Ich ignoriere.
Beim Compilen meldet er File not found: VCL Forms.dcu
Anscheinend fehlt mir eine Komponente, um das Program ablaufen zu lassen.

jaenicke 17. Mär 2012 22:37

AW: Autostart unter Windows 7
 
Du hast dann offenbar eine ältere Delphiversion. Da du das weder im Thread noch im Profil angegeben hast, habe ich einfach mal wie schon geschrieben XE2 benutzt.
Bei älteren Delphiversionen musst du die Unitnamen korrigieren, da die Standardunits da noch keine Namespaces benutzt haben. VCL.Forms hieß vorher z.B. einfach nur Forms.

Und Elevation bringt das Schildchen zum Symbolisieren der nötigen Adminrechte an. Das ging vorher nur manuell.

Um welche Delphiversion geht es denn?

jodahush 18. Mär 2012 07:06

AW: Autostart unter Windows 7
 
Hallo
Meine Delphi version ist 7.
X2 jene ich noch gar nicht.
Ich habe eine weile gar nicht programmiert, daher habe ich wohl einiges nicht mit bekommen

jaenicke 18. Mär 2012 09:38

AW: Autostart unter Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Gut, da geht natürlich noch gar nichts an aktuellen Features. Einiges wurde in Delphi 2006 eingeführt (nested types, Klassenvariablen, FindCmdLineSwitch Erweiterung), anderes in Delphi 2010 (Klassenkonstruktoren/-destruktoren). Im Anhang findest du eine Version, die für alle Versionen geht. Wenn man für so alte Versionen schreiben muss, würde man diese Features natürlich normalerweise einfach gar nicht erst nutzen. Gerade mit dem alten FindCmdLineSwitch bleibt aber eine gewisse Unsicherheit, da man sich auf die Reihenfolge der Parameter verlässt.

jodahush 18. Mär 2012 13:44

AW: Autostart unter Windows 7
 
Vielen Dank für das update.
Das Programm läuft jetzt und lässt sich auf meinem System compilieren.

Leider klappt auch das nicht. Das Program meldet "nicht erfolgreich".
Ich habe im Kommentar "Test" eingegeben, u. im Befehl C:\Windows\Notepad.exe

Wenn ich dich richtig verstehe, funktioniert dein Program normalerweise unter Win7 64.

Dann bleibt nur der Schluss, das an meinem System mittlerweile etwas verbogen wurde. Wenn das so ist, nehme ich deinen Code, u. stelle den Autostart an meinem Rechner manuell ein.

jaenicke 18. Mär 2012 15:42

AW: Autostart unter Windows 7
 
Stell am besten einmal ein, dass es für den aktuellen Benutzer sein soll. Dann brauchst du keine Adminabfrage und kannst im Code debuggen was passiert.

Du kannst auch ein Log mit dem Process Monitor erstellen und gefiltert auf diese Exe hier posten. ;-)

jodahush 18. Mär 2012 17:55

AW: Autostart unter Windows 7
 
Gut

ok, auf der Form Steht beim Start: Autostart nicht gefunden.

Der Code läuft bis:
class function TAutostart.InternalModifyEntryDirect(const ADescription, ACommand: string; const ALocation: TEntryLocation;
AOperation: TEntryOperation): Boolean;
var
Reg: TRegistry;
begin
Result := False;
Reg := TRegistry.Create(KEY_ALL_ACCESS or KEY_WOW64_64KEY);
try
Reg.RootKey := cRegRoot[ALocation];
if Reg.OpenKey('Software\Microsoft\Windows\CurrentVer sion\' + cRegLocation[ALocation], AOperation = eopCreate) then // hier steigt delphi aus
//die Abfrage gibt wohl false zurück und..

begin
if AOperation = eopCreate then
Reg.WriteString(ADescription, ACommand)
else if Reg.ValueExists(ADescription) then
Reg.DeleteValue(ADescription);
Result := True;
Reg.CloseKey;
end; //hier geht es weiter
finally
Reg.Free;
end


Einen Log mit dem Process Monitor...gibt es diesen schon mit Delphi 7? Ich kenne den PM noch nicht.

DeddyH 18. Mär 2012 18:34

AW: Autostart unter Windows 7
 
Process Monitor
Das nächste Mal bitte selber googlen ;)

jodahush 18. Mär 2012 19:27

AW: Autostart unter Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
OK, die Darstellung der Prozesse in dem Process Monitor übersteigt meinen Horizont.
Ich habe mal versucht aufzufangen, was passiert, wenn ich "Erzeugen" in dem Program Autostart Test von Janicke klicke.
Die Log file hängt dran.
Ich habe
a) Autostart Test gestartet
b) Einträge befüllte
c) Process Monitor gestartet, Fenster gewischt
d) Capture Events ge-klickt
e) Erzeugen in Autostart Test geklickt
f) Capture Events wieder ausgeklickt.

Ich hoffe das war so richtig

jaenicke 18. Mär 2012 19:44

AW: Autostart unter Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Eigentlich war das schon richtig, aber in dem Log ist fast nix drin. Und von dem Projekt finde ich gar nix.

Ich habe einmal den Filter und das Highlighting eingestellt wie im Screenshot zu sehen. Wichtig sind jeweils die include Zeilen. Markiert im Log siehst du dort die Zeile, in der man sieht, dass in den Eintrag Test der Wert cmd.exe geschrieben wird. Das habe ich für den aktuellen Benutzer gemacht.

Wenn du den Filter so einstellst, solltest du auch Einträge von deinem Projekt im Log sehen. Sonst stimmt etwas nicht. Bei Speichern kannst du dann "Events displayed using current filter" aktivieren, damit die herausgefilterten Einträge gar nicht gespeichert werden.

Anhang 36531

jodahush 18. Mär 2012 22:24

AW: Autostart unter Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich prüfe das morgen mal mit dem Filter.
Also das ganze ist für mich schon sehr anspruchsvoll.
Bin mal gespannt was du rausfindest.
Ich habe jetzt ein zweites Logfile erstellt, das von Start compiling bis programmstop eigentlich alles aufgezeichnet hat.
Morgen schau ich mal ob ich mit den Filtern was erkennen kann.

vg
jodahush

jaenicke 19. Mär 2012 06:02

AW: Autostart unter Windows 7
 
Leider ist da nichts von dem Programm geloggt, nur der Start durch Delphi. Die Filter müssen irgendwie falsch sein.

Klick bitte einmal bei den Filtern auf Reset und gib nur die Filter ein, die in meinem Screenshot zu sehen sind (die beiden oberen sind die wichtigen, die restlichen Standard beim Process Monitor). Dann sollten da einige Einträge erscheinen, und zwar nur solche, bei denen die Exe auch vorne in der Spalte steht.

Du kannst aber auch einmal nach dem Schlüssel Run in der Registry schauen und prüfen welche Zugriffsrechte der hat. Wenn dein Benutzer da keine Zugriffsrechte hat, wäre der Fehler klar.

Ansonsten könnte ich heute Abend (ab ca. 20 Uhr) auch kurz über TeamViewer draufschauen, wenn du möchtest.

jodahush 19. Mär 2012 12:20

AW: Autostart unter Windows 7
 
Danke, ich geh mal einzeln auf die Punkte ein.
- Den Prozess Viewer probiere ich gerade an meinem Arbeitsrechner aus. Ich werden mit entsprechenden Filtern heute abend zuhause mal aufzeichnen.
- Das mit den Rechten ist eine gute Idee. Bin garnicht auf die Idee gekommen, das meine Rechte im Run ordner auch für Admin verstellt sein könnten.
- Team Viewer, auch ne gute idee. Den TV wollte ich eh mal ausprobieren u. werde ihn heute abend mal installieren.
gruss
jodahush

jodahush 19. Mär 2012 20:13

AW: Autostart unter Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich denke nun habe ich ein vernünftiges Log file.
Die Filter entsprechend gesetzt sehe ich die Prozesse, den Fehler aber erkenne ich nicht.

Ich habe für beide Run Schlüssel als Admin Vollzugriff, als User Lesend. HIeran lag es also nicht.

Schau mal ob du was mit dem Logfile anfangen kannst.

Ansonsten können wir den Teamviewer probieren.

gruss
jodahush

jaenicke 20. Mär 2012 15:58

AW: Autostart unter Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jodahush (Beitrag 1157440)
Ich habe für beide Run Schlüssel als Admin Vollzugriff, als User Lesend. HIeran lag es also nicht.

Doch, daran liegt es. Ich habe mal den Screenshot von dem entscheidenden Abschnitt angehängt. Zuerst wird versucht auf den Run-Zweig schreibend zuzugreifen, das klappt nicht (Access denied), danach wird es dann noch einmal ausgelesen um den Status anzuzeigen.

Ich weiß nicht was mit deinen Rechten los ist. Und eigentlich starte ich im Beispielprogramm ja das eigene Programm nochmal mit Adminrechten, wenn ich keine habe. Auf einem normal konfigurierten System klappt das eigentlich.

jodahush 20. Mär 2012 17:13

AW: Autostart unter Windows 7
 
OK, vielen Dank. Dann ist wohl irgend etwas auf meinem System verbogen, aber wenigstens funktioniert mein Program.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz