J’essaye d’appeler un exécutable au démarrage, qui appellera un autre exécutable lui-même. Pour la première partie, j’ai simplement ajouté le chemin d’access à l’exécutable vers HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
, qui fonctionne, mon exécutable est appelé au démarrage.
Ce dernier contient, entre autres, ces lignes:
startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow = subprocess.SW_HIDE proc = subprocess.Popen(command, startupinfo=startupinfo)
Cependant, un shell de commande (cmd) apparaît lorsque l’ordinateur démarre. Tout fonctionne bien, mais il est visible au lieu d’être caché … Alors, comment cacher ce shell de commande?
Lorsque vous utilisez ProcessExplorer
, j’ai la hiérarchie suivante:
+ System |_ Interrupts |_ smss.exe |_ some processes... + explorer.exe |_ some processes... |_ MYSCRIPT.EXE
Voici la séquence que j’essaie de réaliser:
master.exe
) appelle les autres. D:\master.exe
master.exe
(parmi d’autres tâches qui ne nous concernent pas ici) ajoute la valeur D:\myscript.exe
à HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
D:\myscript.exe
est exécuté (et fonctionne D:\myscript.exe
), mais il s’exécute dans une invite de commande, que je voudrais être invisible. C’est un problème typique rencontré par les programmeurs Python – et par conséquent, une solution est proposée par Python lui-même. Il a été demandé à plusieurs resockets, par exemple ici , mais pour vous, le problème est un peu plus compliqué.
Il s’agit de savoir si vous utilisez python.exe
ou pythonw.exe
pour exécuter votre script. Pour la première, une console est ouverte, pour la seconde ce n’est pas le cas.
Lorsque vous utilisez des scripts compilés, vous devez indiquer “le compilateur” la version que vous souhaitez utiliser. En supposant que vous utilisez py2exe, vous pouvez consulter ce post sur SO . Ici, on explique en détail comment procéder.
La fenêtre de la console en cours d’ouverture appartient probablement au processus Python exécutant votre script. Montrez-nous l’entrée dans le registre exécutant votre script.
Si vous exécutez un programme de console, Windows créera une fenêtre de console. “python.exe” est un programme de console.
Si vous ne voulez pas de fenêtre de console, vous pouvez exécuter votre script Python avec “pythonw.exe” plutôt que “python.exe”.
Vous pouvez le comstackr au format exe. Lorsque je rencontre ce problème, j’ai utilisé py2exe pour comstackr le fichier python en exécutable invisible.
Tout ce que vous avez à faire est de changer le fichier setup.py (utilisé pour comstackr), à partir de
setup(console=['__main__.py'], options={"py2exe":{"includes":["sip"]}})
à
setup(windows=['__main__.py'], options={"py2exe":{"includes":["sip"]}})
J’ai eu le même problème et j’ai utilisé Pyinstaller .
Pyinstaller est un outil intelligent multi-plateformes pour comstackr des fichiers .py en fichiers exécutables autonomes.
Installez-le via:
pip install pyinstaller
(plus d’informations ici )
Utilisez la commande suivante pour masquer la console (pour que votre script devienne un processus):
pyinstaller yourfilename.py -F --windowed
(avec l’option “-F”, vous obtiendrez un seul fichier .exe et avec l’option “–windowed”, la console sera cachée)