I want my Python script to copy files on Vista. When I run it from a normal cmd.exe
window, no errors are generated, yet the files are NOT copied. If I run cmd.exe
"as administator" and then run my script, it works fine.
This makes sense since User Account Control (UAC) normally prevents many file system actions.
Is there a way I can, from within a Python script, invoke a UAC elevation request (those dialogs that say something like "such and such app needs admin access, is this OK?")
If that's not possible, is there a way my script can at least detect that it is not elevated so it can fail gracefully?
Best Solution
As of 2017, an easy method to achieve this is the following:
If you are using Python 2.x, then you should replace the last line for:
Also note that if you converted you python script into an executable file (using tools like
py2exe
,cx_freeze
,pyinstaller
) then you should usesys.argv[1:]
instead ofsys.argv
in the fourth parameter.Some of the advantages here are:
ctypes
andsys
from standard library.Documentation for the underlying ShellExecute call is here.