我有一个需要以管理员身份运行的PySide应用。我使用了this post.
推荐的技术import os
import sys
import time
from PySide.QtGui import *
from win32com.shell import shellcon
import win32com.shell.shell as shell
import win32con
def force_elevated():
try:
if sys.argv[-1] != 'asadmin':
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + ['asadmin'])
shell.ShellExecuteEx(nShow=win32con.SW_SHOWNORMAL,
fMask=shellcon.SEE_MASK_NOCLOSEPROCESS,
lpVerb='runas',
lpFile=sys.executable,
lpParameters=params)
sys.exit()
except Exception as ex:
print ex
class MyGui(QWidget):
def __init__(self):
super(MyGui, self).__init__()
self.show()
app = QApplication(sys.argv)
force_elevated()
splash = QSplashScreen("logo.png")
splash.show()
time.sleep(2)
gui = MyGui()
app.exec_()
Windows UAC弹出并要求用户允许管理员权限。如果用户选择“是”,则应用程序的新实例将以管理员模式启动。如果用户选择“否”,则try语句将失败,程序将继续以非管理员模式运行。
问题是,当在非管理员模式下运行时,应用程序会在其他窗口后面启动,因此很容易认为它根本没有运行。使用cx_freeze生成可执行文件后,即使执行激活管理模式也会发生这种情况。
我无法将窗口置于最顶层。我已经尝试暂时将其设置在顶部(将其置于前面),然后将其关闭,但这不起作用。我还尝试使用各种库和内置函数来定位进程ID并告诉窗口将它带到前面。他们要么根本没有工作,要么不能可靠地工作。
有没有人有可靠的方法来确保PySide窗口出现在顶部?
答案 0 :(得分:0)
您可以使用gui.raise_()