我正试图通过函数通过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')