Script in Autostart ziehen

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Donnerstag 12. März 2009, 15:24

Und dann mach ich:

Code: Alles auswählen

import sys, os
filename = "script.py"
folder = sys.argv[0].rstrip(filename)
os.chdir(folder)

Und das soll dann ein gute Lösung sein?! Ist für mich ein Notfall-Hack, aber keine schöne Lösung meiner Meinung nach.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Donnerstag 12. März 2009, 15:54

Code: Alles auswählen

import os, sys
folder = os.path.dirname(os.path.abspath(sys.argv[0]))

Ist mir ehrlich gesagt weit lieber ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 12. März 2009, 17:21

ice2k3 hat geschrieben:Und das soll dann ein gute Lösung sein?!

Ne, aber von so einer Lösung hat auch niemand gesprochen. Keine Ahnung wie du nun auf sowas kommst.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Donnerstag 12. März 2009, 20:20

Das war ja nur auf die Schnelle.
Ich meinte das halt allgemein. Ist das so gängig, aus sys.argv den Ordner zu lesen und diesen dann als "Working-Dir" zu setzen?
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Donnerstag 12. März 2009, 20:26

Du musst ja nicht unbedingt das working Directory wechseln, sondern kannst per `os.path.join(folder, fname)' dann an die eigentlichen Dateien kommen.
Wenn du keine GUI-Applikation hast, solltest du den Verzeichniswechsel unterlassen, denn der Benutzer hat das Programm ja eventuell aus einem guten Grund aus dem Verzeichnis gestartet.
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Donnerstag 12. März 2009, 21:09

a) Ja, es ist eine GUI-App
und
b) Nicht der Benutzer ruft es aus einem anderen Verzeichnis auf, sondern der Windows-Autostart ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 13. März 2009, 09:51

ice2k3 hat geschrieben:Ist das so gängig, aus sys.argv den Ordner zu lesen und diesen dann als "Working-Dir" zu setzen?

Nein. Es ist eigentlich nie gängig, dass das Programm sein Working Directory einfach so ändert. Der User hat das Programm in einem bestimmten Ordner gestartet und damit höcstwarscheinlich irgendetwas damit bezweckt, daher wäre es schlecht wenn das Programm eigenwillig entscheidet dass es doch lieber ein anderes Working Directory hätte.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Freitag 13. März 2009, 10:00

ice2k3 hat geschrieben:b) Nicht der Benutzer ruft es aus einem anderen Verzeichnis auf, sondern der Windows-Autostart ;)


Ganz ehrlich, wie oft muss ich das denn noch sagen?!

Das wäre mal meine Alternative (Hoffe mal, dass klar ist, was ich da mache^^)

Code: Alles auswählen

import os
import sys

def register(folder):
   start_file = "%s/start.bat" % folder
   with open(start_file, "w") as f:
      f.write("@echo off\n")
      f.write("cd "%s"\n" % folder)
      f.write("start /B dbremote.exe")
   # Dann kommt Registry Eintrag auf Batch File
         
if __name__ == "__main__":
   register(os.getcwd())
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 13. März 2009, 10:29

ice2k3 hat geschrieben:
ice2k3 hat geschrieben:b) Nicht der Benutzer ruft es aus einem anderen Verzeichnis auf, sondern der Windows-Autostart ;)


Ganz ehrlich, wie oft muss ich das denn noch sagen?!

Es ist generell ein schlechtes vorgehen, daher ist es egal wer es aufruft. Und auch bei Autostart-Verknüpfungen kann der Benutzer auswählen, was das Arbeitsverzeichnis sein sollte.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Beitragvon INFACT » Freitag 13. März 2009, 16:42

Das mit der Registy finde ich nicht so gut, weil ich glaube, dass das programm sich selbst da rein kopiert [hab das mit os.getcwd() herausgefunden] (weiß aber nicht ob das richtig ist) und wenn man dll's braucht, dann funktioniert das Programm nicht. Wenn das nicht richtig ist, bitte korrigiert mich :wink:

Ich weiß nicht ob das richtig ist, aber ich glaube es.
Kann man irgendeinen Link in die Reg machen? -sorry ich kenne mich damit nicht so aus-
Danke
Robin :wink:
Zuletzt geändert von INFACT am Freitag 13. März 2009, 21:08, insgesamt 1-mal geändert.
ein kleines game für die die lust haben http://konaminut.mybrute.com
;-)
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Freitag 13. März 2009, 17:11

Leonidas hat geschrieben:Es ist generell ein schlechtes vorgehen, daher ist es egal wer es aufruft. Und auch bei Autostart-Verknüpfungen kann der Benutzer auswählen, was das Arbeitsverzeichnis sein sollte.

Aber nicht, wenn man es in der Registry macht...
(HKLM\Software\Microsoft\Windows\CurrentVersion\Run)
Darum gehts mir ja grade! Wie kann ich da das Arbeitsverzeichnis festlegen (ohne die Lösung mit dem Batchfile oder dem Programm selber)?

INFACT hat geschrieben:Das mit der Registy finde ich nicht so gut, weil ich glaube, dass das programm sich selbst da rein kopiert [hab das mit os.getcwd() herausgefunden] (weiß aber nicht ob das richtig ist) und wenn man dll's braucht, dann funktioniert das Programm nicht. Wenn das nicht richtig ist, bitte korrigiert mich Wink

Nein, das Programm kopiert sich nirgendwo rein. Es wird nur in einem anderen Verzeichnis ausgeführt (C:\Dokumente und Einstellungen\%USERNAME%). Darum geht es auch in dieser Diskussion mit Leonidas gerade.
Um das zu umgehen, kann man ein Batch-File erstellen, das das richtige Working Dir setzt und dann das Programm startet (s. mein letzter Post).
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 13. März 2009, 18:38

ice2k3 hat geschrieben:Aber nicht, wenn man es in der Registry macht...

Wozu ich generell nicht raten kann, weil das einfach Userfeindlich ist und dort hauptsächlich irgendeine Software die man nicht haben will sich einträgt ohne dass der Otto-Normal-User es einfach so, gefahrlos rauslöschen kann. Da ist die Verknüpfung im Autostart besser. Und Verknüpfungen würde ich auch nicht in HKLM sondern wenn schon dann in HKCU anlegen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Montag 16. März 2009, 18:44

Ok, über den Schlüssel "Common Startup" unter "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" komme ich ja an das Verzeichnis.
Die Batch-Datei (wie oben im Code) leg ich dann einfach in diesem Verzeichnis an.
Ist das dann ein gutes Vorgehen?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 16. März 2009, 18:54

Besser nur in den Startup eines Users, nicht in den von allen. Die anderen User wollen es ja vermutlich nicht im Autostart haben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Montag 16. März 2009, 18:59

Doch, für dieses Programm schon. Ist mein Datenbank-Server (s. Thread unter Datenbankprogrammierung).

Weiß vielleicht jemand, ob oben genannte Vorgehensweise auch unter den Windows Server Versionen funktioniert?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder