Wie kopiere ich mein script in die Windows Registry?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Ich habe mir ein kleines Python Programm geschrieben und möchte nun, dass sich dieses - wenn ich es so in meinem Einstellungsmenü festlege - automatisch zusammen mit Windows startet.
Deshalb möchte ich, dass mein Programm automatisch eine Verknüpfung in die Windows Registry erstellt, damit ich das nicht manuell machen muss.
Ich hab bis jetzt nichts dazu gefunden. Kann mir jemand helfen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Reicht nich eine Verknüpfung in Autostart?

In der Registry gibt es meherere Orte, wo Autostart-Programme zu finden sind:
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Auf dir Registry kannst du aus Python aus mit _winreg zugreifen, aber die Standardwarnung gilt dennoch: damit kann man sein System zerschließen, wenn man wichtige Sachen aus versehen verstellt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

Ok, stimmt, ist vielleicht sicherer, wenn ich nur eine Verknüpfung in Autostart erstelle.
Gibt es da schon fertige Funktionen oder Beispiel-Scripts dafür? Hab bis jetzt eigentlich nichts gefunden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Anonymous hat geschrieben:Gibt es da schon fertige Funktionen oder Beispiel-Scripts dafür?
Es gibt dafür mehrere Möglichkeiten, für beide brauchst du pywin32 (formerly known as win32all).

Also:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Ok, danke, das hilft mir schon weiter.
Hab jetzt allerdings noch ne ziemliche Dummy-Frage :oops:
also ich hab zum ersten mal aus meinem Python script eine ausführbare .exe-Datei gemacht und ich darf sie ja nicht einfach in Autostart kopieren, sondern muss eine Verknüpfung erstellen.
Hmm, jetzt frag ich mich, wie man das macht ...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Kathrin hat geschrieben:also ich hab zum ersten mal aus meinem Python script eine ausführbare .exe-Datei gemacht und ich darf sie ja nicht einfach in Autostart kopieren, sondern muss eine Verknüpfung erstellen.
Hmm, jetzt frag ich mich, wie man das macht ...
Naja, an sich dürftest du auch die EXE in Autostart kopieren.. ist aber unüblich, stimmt.

Was meinst du mit, "wie man eine Verknüpfung macht"? Per Hand oder mit Python? Für eine Python-Lösung habe ich dir einige Links gegeben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

Ich denke eine Verknüpfung kann man auch per Hand erstellen. IMHO ist es nur eine Text-Datei mit der Endung .lnk.... Wie so eine Aussieht, weiß ich aber jetzt nicht...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das Format einer .lnk-Datei ist binär, also würde ich vom "per Hand erstellen" Abstand nehmen.

Zum Anlegen per Hand, Du ziehst ein Icon mit der rechten Maustaste in den passeden (Autostart) Ordner und wärlst dort "Verknüpfung hier erstellen". Alternativ auch in den Ordner rechtsklicken und dort unter "Neu" -> "Verknüpfung" auswählen und vom Assistenten (auch als Wizard bekannt :roll: ) durch die Dialoge leiten lassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

also ich habs jetzt hinbekommen mit Hilfe von winshell eine Verknüfung zu erstellen (Danke schonmal!)
... Problem ist nur, dass mein Programm nicht mehr komplett läuft, wenn ich es im autostart ausführe.
Ich habe meine exe-Datei mit py2exe erstellt und nun einen Ordner in dem alle benötigten Dateien sowie die exe-Datei selbst enthalten sind. Muss ich da beim Verknüpfen etwas besonders beachten? Wenn ich manuell eine Verknüpfung erstelle, muss ich ja auch nur eine Verknüpfung zur exe-Datei erstellen und mein Programm läuft.
Kann mir jemand sagen warum es mit winshell nicht klappt?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Anonymous hat geschrieben:Wenn ich manuell eine Verknüpfung erstelle, muss ich ja auch nur eine Verknüpfung zur exe-Datei erstellen und mein Programm läuft. Kann mir jemand sagen warum es mit winshell nicht klappt?
Hi!

Wenn du manuell eine Verküpfung erstellst, dann wir automatisch der Ordner des verknüpften Programmes zum Arbeitsordner. Vielleicht kannst du mit "winshell" der Verknüpfung auch den Arbeitsordner (=ausführen in) übergeben.

Schau dir mal mit

Code: Alles auswählen

dir(winshell.CreateShortcut)
an, ob es eine Möglichkeit dafür gibt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hier ein Auszug aus der MSDN-Library: Vorsicht Visual Basic Script.

Code: Alles auswählen

         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
Zumindest interessant, wenn man den Shortcut mit dem Windows Scripting Host erstellt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Danke für die Hilfe!

Habs jetzt folgendermaßen hinbekommen, falls es jemanden interessiert:

Code: Alles auswählen

import winshell
autostartDirectory = winshell.startup (1)

winshell.CreateShortcut (
 Path=os.path.join (autostartDirectory, "myProg.exe.lnk"),
 Target=r"c:\tests\myProg.exe",
 Icon=(r"c:\tests\myProg.exe", 0),
 Description="Link to myProg.exe",
 StartIn="c:\tests"
Jetzt suche ich nur noch nach einer Möglichkeit meinen Link wieder zu löschen (vielleicht auch mit winshell)

MfG,
Kathrin!
Zuletzt geändert von Kathrin am Mittwoch 4. Januar 2006, 16:39, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Kathrin hat geschrieben:Jetzt suche ich nur noch nach einer Möglichkeit meinen Link wieder zu löschen (vielleicht auch mit winshell)
Hi Kathrin!

So ein Link ist ja nur eine einfache Datei. Dateien kannst du mit

Code: Alles auswählen

os.remove()
löschen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

das hab ich mir eigentlich auch so gedacht, hat aber nicht geklappt.
(Normalerweise verwende ich auch os.remove)

OK, dann weiß ich wenigstens, dass es doch so funktionieren müsste ... vielleicht hat sich ein blöder Syntx-Fehler oder so reingeschlichen.

Danke!

:D
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Kathrin hat geschrieben: OK, dann weiß ich wenigstens, dass es doch so funktionieren müsste ... vielleicht hat sich ein blöder Syntx-Fehler oder so reingeschlichen.
Hi Kathrin!

So sollte es eigentlich funktionieren:

Code: Alles auswählen

os.remove(os.path.join(autostartDirectory, "myProg.exe.lnk"))
Hast du vielleicht ".lnk" vergessen?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Ich bekomme leider fogende Fehlermeldung

Code: Alles auswählen

OSError: [Errno 13] Permission denied: 'C:\\Dokumente und Einstellungen\\All Users\\Startmen\xfc\\Programme\\Autostart\\MyProg.exe.lnk'
:(
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Kathrin hat geschrieben:Ich bekomme leider fogende Fehlermeldung

OSError: [Errno 13] Permission denied: 'C:\\Dokumente und Einstellungen\\All Users\\Startmen\xfc\\Programme\\Autostart\\MyProg.exe.lnk'
Hmmmh...
In "C:\Dokumente und Einstellungen\All Users" dürfen nur Administratoren und evt. noch Hauptbenutzer etwas löschen. Vielleicht liegt es daran.

Am *os.remove()* liegt es nicht. Ich habe es soeben mit Win2000 ausprobiert. Ich konnte damit einen Link aus dem oben genannten Ordner löschen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

In "C:\Dokumente und Einstellungen\All Users" dürfen nur Administratoren und evt. noch Hauptbenutzer etwas löschen. Vielleicht liegt es daran.
Also daran liegt es nicht. Hab eigentlich volle admin Rechte.
Und manuell kann ich den Link auch löschen.

Versteh momentan auch überhauptnicht, warum mir das Löschen verweigert wird. :(
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Kathrin hat geschrieben:Versteh momentan auch überhauptnicht, warum mir das Löschen verweigert wird. :(
Versuche mal mit sysinternal's ProcessExplorer nach zu sehen, ob eine Handle noch auf die Datei weißt: http://support.microsoft.com/kb/q232830/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Also es funktioniert :D

Danke schön!

Grüße, Kathrin!
Antworten