On 4/10/13 5:05 PM, Zak wrote:
Hello Don,
I hate Windows but I work with it a lot.
Yep; me too.
I made something similar to a Windows service using PyInstaller and
PySide. More specifically, I was making a backup utility. I wanted it
to start every time Windows booted up, I wanted it to keep running
while Windows was "asleep" and even if the user had been logged out
due to inactivity, and I wanted it to not have a window. I achieved
all these goals. Here is how I did it:
Very nice. I want to stay with the windows service to make it easier to
control from the Services panel. Still, I'll keep your idea in mind.
Thanks for the suggestion.
1. When calling PyInstaller, use the --windowed option. This seems
counter-intuitive since we don't want a window, but bear with me. If
you use --nowindowed that is *definitely* bad because it will open a
CMD.EXE terminal that displays STDOUT from the Python process.
2. We are going to make this a PySide GUI application, at least in
theory. Here is a working example:
# File: myapp.py
import threading
from PySide.QtCore import *
from PySide.QtGui import *
class SpecialWindow(QDialog):
def __init__(self, parent=None):
super(SpecialWindow, self).__init__(parent)
self.setWindowTitle("Name of My Application")
# Make the "minimize" button appear:
self.setWindowFlags(Qt.WindowMinimizeButtonHint)
# Without the line above, the "minimize" button may
# be grayed out on Windows.
special_window = SpecialWindow()
special_window.show()
special_window.showMinimized()
# Calling .showMinimized() is equivalent to clicking the
# minimize button in the corner of the window.
# Whatever your background application is supposed to do,
# put that Python code here. I did this using the Python
# threading library. Here is a little example:
thread = threading.Thread(group=None, target=my_awesome_cool_function,
name="My thread")
thread.start()
app.exec_()
# Execution reaches this point when the user closes the application,
usually by
# maximizing it and then clicking the X in the corner.
# Clean up your thread and then terminate it.
3. Package myapp.py with PyInstaller, and try it out. Double-clicking
myapp.exe should start your Python code, a GUI window will NOT open,
and an icon appears in the system tray. When you mouse over the icon,
it will say "Name of My Application", or whatever "window title" you
set. If you click it, a GUI window will open. You can close this GUI
window and thus terminate the app. Alternatively, you can re-minimize
the app by clicking in the corner.
4. To make this background application start every time Windows boots
up, place myapp.exe in the startup folder. On Windows 8, the startup
folder is here:
C:\Users\username\AppData\Roaming\Microsoft\Windows\Start
Menu\Programs\Startup
This should work, I have done it recently.
Good luck,
Zak Fallows
--
You received this message because you are subscribed to the Google
Groups "PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to
[email protected].
To post to this group, send email to
[email protected].
Visit this group at http://groups.google.com/group/pyinstaller?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups
"PyInstaller" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/pyinstaller?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.