I\'m writing a little program as a self-learning project in Python 3.x. My idea is for the program to allow two fields of text entry to the user, and then plug the user\'s i
Most straightforward way is try to change the key at the beginning, maybe to a stub value - if that fails, catch the error and tell the user.
With pywin32, something like the following should work...:
import pythoncom
import pywintypes
import win32api
from win32com.shell import shell
if shell.IsUserAnAdmin():
...
And yes, it seems pywin32 does support Python 3.
I needed a simple, Windows/Posix solution to test if a user has root/admin privileges to the file system without installing an 3rd party solution. I understand there are vulnerabilities when relying on environment variables, but they suited my purpose. It might be possible to extend this approach to read/write the registry.
I tested this with Python 2.6/2.7 on WinXP, WinVista and Wine. If anyone knows this will not work on Pyton 3.x and/or Win7, please advise. Thanks.
def has_admin():
import os
if os.name == 'nt':
try:
# only windows users with admin privileges can read the C:\windows\temp
temp = os.listdir(os.sep.join([os.environ.get('SystemRoot','C:\\windows'),'temp']))
except:
return (os.environ['USERNAME'],False)
else:
return (os.environ['USERNAME'],True)
else:
if 'SUDO_USER' in os.environ and os.geteuid() == 0:
return (os.environ['SUDO_USER'],True)
else:
return (os.environ['USERNAME'],False)
Here's a short article on how to determine if an application requires elevated privileges.
You can use pywin32 or ctypes to do the CreateProcess() call.
I suggest ctypes since it comes standard in python now, and there is a good example of using CreateProcess with ctypes here.