使用 Pyinstaller 打包為 windows exe程式 新增管理員許可權的多種方式
本文提供幾種在使用 Pyinstaller
打包後,為包體 exe
提升管理員許可權的方式。
注意事項:
管理員許可權的必要性:確保程式確實需要
管理員許可權,否則使用者可能會質疑程式的安全性。
數字簽名:最好對生成的 .exe
檔案進行數字簽名,否則某些防毒軟體可能會誤報。
準備測試指令碼
準備一個測試用指令碼,用於檢查是否真的擁有管理員許可權
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File : administrator_rights.py
@ Author : yqbao
@ Version : V1.0.0
@ Description : 測試用指令碼
"""
import os
import time
def test_admin_privileges():
try:
with open(r"C:\Windows\System32\test_admin.txt", "w") as f:
f.write("測試管理員許可權")
print("程式已以管理員許可權執行")
os.remove(r"C:\Windows\System32\test_admin.txt") # 清理測試檔案
except PermissionError:
print("程式未以管理員許可權執行,請使用管理員許可權啟動")
time.sleep(3) # 休眠,方便檢視
if __name__ == "__main__":
test_admin_privileges()
方法一:使用 --uac-admin 引數(推薦)
直接在打包時,應用引數
# 舉例:最簡化的打包引數使用方法,
pyinstaller -F --uac-admin .\administrator_rights.py
pyinstaller -D --uac-admin .\administrator_rights.py
或者你也可以直接修改 .spec 檔案
... # 省略
exe = EXE(
... # 省略
uac_admin=True, # 在最後增加這句
)
打包後,在包體圖示右下角,會有個 管理員許可權
標識
執行後,不一定會彈出 UAC 許可權確認,但是確實也是用的管理員許可權執行
方法二:在程式碼中直接提升 UAC 許可權
修改測試指令碼,增加下面的內容
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File : administrator_rights.py
@ Author : yqbao
@ Version : V1.0.0
@ Description :
"""
import ctypes
import os
import sys
import time
def test_admin_privileges():
... # 忽略,無變化
if __name__ == "__main__":
if not ctypes.windll.shell32.IsUserAnAdmin(): # 檢查是否擁有管理員許可權
# 如果不是管理員許可權,則重新以管理員許可權執行
ctypes.windll.shell32.ShellExecuteW(
None, "runas", sys.executable, " ".join(sys.argv), None, 1
)
sys.exit()
test_admin_privileges()
舉例:使用最簡化的打包
pyinstaller -F .\administrator_rights.py
pyinstaller -D .\administrator_rights.py
打包後,在包體圖示右下角,不會有管理員許可權標識
執行後,不一定會彈出 UAC 許可權確認,但是確實也是用的管理員許可權執行
方法三:透過 manifest 檔案指定(但是這種方式,並未成功,不過也記錄在這裡)
1.建立一個 manifest 檔案
新建一個名為 your_script.manifest
的檔案,內容如下
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
2. 透過 PyInstaller 新增 manifest 檔案
pyinstaller --manifest your_script.manifest -F .\administrator_rights.py
本文章的原文地址
GitHub主頁