通过 Python 启用 Windows 功能不会让 DISM 具有提升的访问权限,即使让 Python 通过函数获得提升的访问权限



我正试图通过函数通过Python启用Windows功能。以下是我使用过的脚本:

UAC.py:

def gainadminaccess():
import os
import sys
import win32com.shell.shell as shell
ASADMIN = 'asadmin'
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
if __name__ == "__main__":
gainadminaccess()

winfeatures.py

def install(feature):
packageName = feature
import os
os.system("cmd /k dism /online /Enable-Feature /FeatureName:" + packageName + "/All")
if __name__ == "__main__":
install()

enablefeatures.py:

import UAC
import winfeatures
import os
UAC.gainadminaccess()
winfeatures.install('VirtualMachinePlatform')

我可以通过UAC提示,但当通过winfeatures到达功能部件时,它会显示:


Error: 740
Elevated permissions are required to run DISM. 
Use an elevated command prompt to complete these tasks.

我认为DISM没有获得提升的访问权限。有什么办法吗?

这:

UAC.gainadminaccess()
winfeatures.install('VirtualMachinePlatform')

第一行将启动一个新流程。第二行执行,但仍以非管理员身份运行:

我想你想要这个:

def gainadminaccess():
import os
import sys
import win32com.shell.shell as shell
ASADMIN = 'asadmin'
isAdmin = sys.argv[-1] == ASADMIN
if not isAdmin:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)

return isAdmin # returns true if this script is already running as admin

然后在你的另一个文件中:

if UAC.gainadminaccess():
winfeatures.install('VirtualMachinePlatform')

最新更新