2011-11-10 34 views
3

如何檢查是否需要privelege提升啓動子進程而不先嚐試然後失敗?如何確定是否需要提升priveleges來啓動一個進程而不通過檢查失敗

我需要從python代碼中啓動一個子進程命令。在某些情況下,它可以正常工作,而在其他情況下,事實證明,需要提高專業知識;在一些Windows系統中,這種情況會導致我的程序凍結。

我想確定是否需要升級privelege升級而不嘗試首先運行子流程並捕獲/捕獲任何錯誤條件。

導致程序凍結的過程被調用;

subprocess.call( '_路徑文件名_選項',殼= FALSE)

+1

不可能這樣做100%。好的開始是閱讀應用程序清單並檢查requireAdministrator。 –

+0

感謝您的提示,我會進一步調查:) –

+0

檢查失敗有什麼問題? EAFP是Python的標準。 –

回答

3

隨着pywin32,類似下面應該工作...:

import pythoncom 
import pywintypes 
import win32api 
from win32com.shell import shell 

if shell.IsUserAnAdmin(): 
    ... 

是的,這似乎pywin32不支持Python 3的

撰稿Alex Martelli

這也適用於沒有pywin32的人。

import ctypes 
print ctypes.windll.shell32.IsUserAnAdmin() 
+0

HI ,我確實看到了這一點,但出於某些原因和其他人,我無法在這種情況下使用pywin32:/ –

+0

堅持我認爲你可以在ctypes –

+0

中做同樣的事情我也看到了這一點..但它涉及到使用CreateProcess()和檢測它是否失敗(如果我們正在閱讀相同的stackoverflow問題和後續鏈接; P)。我正在考慮至少嘗試ctypes方法,因爲它可能不會導致錯誤情況下的「凍結」,因爲此時在某些情況下會出現故障。我以前沒有以這種方式使用過ctypes,所以我不知道它是否會具有與我目前看到的相同的行爲。 –

相關問題