Seite 1 von 1
Wie kopiere ich mein script in die Windows Registry?
Verfasst: Dienstag 3. Januar 2006, 11:55
von Kathrin
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?
Verfasst: Dienstag 3. Januar 2006, 12:19
von Leonidas
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.
Verfasst: Dienstag 3. Januar 2006, 14:18
von 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.
Verfasst: Dienstag 3. Januar 2006, 14:55
von Leonidas
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:
Verfasst: Dienstag 3. Januar 2006, 15:46
von Kathrin
Ok, danke, das hilft mir schon weiter.
Hab jetzt allerdings noch ne ziemliche Dummy-Frage
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 ...
Verfasst: Dienstag 3. Januar 2006, 15:49
von Leonidas
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.
Verfasst: Dienstag 3. Januar 2006, 17:27
von 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...
Verfasst: Dienstag 3. Januar 2006, 17:47
von Leonidas
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

) durch die Dialoge leiten lassen.
Verfasst: Dienstag 3. Januar 2006, 18:08
von 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?
Verfasst: Dienstag 3. Januar 2006, 18:16
von gerold
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
an, ob es eine Möglichkeit dafür gibt.
mfg
Gerold

Verfasst: Dienstag 3. Januar 2006, 18:26
von gerold
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

Verfasst: Mittwoch 4. Januar 2006, 13:33
von Kathrin
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!
Verfasst: Mittwoch 4. Januar 2006, 13:40
von gerold
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
löschen.
mfg
Gerold

Verfasst: Mittwoch 4. Januar 2006, 13:56
von Kathrin
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!

Verfasst: Mittwoch 4. Januar 2006, 14:05
von gerold
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

Verfasst: Mittwoch 4. Januar 2006, 14:55
von Kathrin
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'

Verfasst: Mittwoch 4. Januar 2006, 16:09
von gerold
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

Verfasst: Mittwoch 4. Januar 2006, 16:19
von Kathrin
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.

Verfasst: Mittwoch 4. Januar 2006, 20:28
von jens
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/
Verfasst: Montag 9. Januar 2006, 12:23
von Kathrin
Also es funktioniert
Danke schön!
Grüße, Kathrin!