PyQt:在Windows中实现程序“开机自启”的最佳方法
我正在用PyQt开发一个应用程序,这个程序在Windows系统中,如果在设置里选择了相关选项,就应该能在开机时自动启动。
我用PyInstaller把这个软件打包成一个单独的可执行文件;我没有一个正规的“安装程序”。
那么,怎么才能实现这个功能呢?(也就是开机自动启动)
一个可能的解决办法是把一个快捷方式放到启动文件夹里,但我需要从软件内部来完成这个操作:这样做可以吗?还有其他方法吗?
有没有一个通用的路径可以找到启动文件夹?我会遇到权限问题吗?
2 个回答
4
你可以在注册表的这个位置:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run],添加一个注册表项,给它起个名字,值设置为“你的程序路径”。这样做需要你有本地管理员权限,但这样设置后,所有用户都能使用这个程序。
如果你在[HKEY_CURRENT_USER]下添加同样的项,就不需要管理员权限了,但这样设置只对当前用户有效。这个注册表路径在Windows 2000到Windows 7的版本中都是一样的。
9
试试这个代码(我用py2exe的时候是可以工作的):
import sys
from PyQt4.QtCore import QSettings
from PyQt4.QtGui import (QApplication, QWidget, QCheckBox, QPushButton,
QVBoxLayout)
RUN_PATH = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
class MainWidget(QWidget):
def __init__(self,parent=None):
super(MainWidget, self).__init__(parent)
self.settings = QSettings(RUN_PATH, QSettings.NativeFormat)
self.setupUi()
# Check if value exists in registry
self.checkbox.setChecked(self.settings.contains("MainWidget"))
def setupUi(self):
self.checkbox = QCheckBox("Boot at Startup", self)
button = QPushButton("Close", self)
button.clicked.connect(self.close)
layout = QVBoxLayout(self)
layout.addWidget(self.checkbox)
layout.addWidget(button)
def closeEvent(self, event):
if self.checkbox.isChecked():
self.settings.setValue("MainWidget",sys.argv[0]);
else:
self.settings.remove("MainWidget");
event.accept()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWidget()
w.show()
app.exec_()