使用ctypes.windll.shell32.ShellExecuteW从Python脚本中请求UAC提升

时间:2018-02-22 00:22:17

标签: python uac

myClass生成一个XLSX文件到'./output'文件夹。 myClass中的以下代码行需要管理员权限:

excel = win32com.client.Dispatch('Excel.Application')

我按照了答案 Request UAC elevation from within a Python script?,现在我有以下脚本:

import ctypes, sys
from my_module import myClass

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if is_admin():
    myClass
else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, "", None, 1)

然而,这似乎提升并退出,就好像我在UAC提示中选择了No。

如果我在Administrator cmd >python uac_test.py中运行上述代码块,它会以某种方式生成2个相同的文件,而不是一个。

我错过了什么吗?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我相信myClass已执行,但是在单独的窗口/进程中执行,所以您没有注意到。

尝试使用类似input()的东西来查看是否确实打开了另一个窗口。