Windows平臺(tái)使用Python切換用戶運(yùn)行程序

在Windows平臺(tái)莫矗,如果需要以某個(gè)指定用戶來運(yùn)行程序碱工,此時(shí)可以通過使用 Windows CreateProcessAsUser API來實(shí)現(xiàn)糖荒。但是要實(shí)現(xiàn)這個(gè)功能首先需要有要切換用戶的用戶名和密碼舶沿。

import psutil
import win32process
import win32security
import win32con
import win32api
import win32service
import win32file
import win32profile
import pywintypes

try:
    username = 'admin'
    password = 'admin'
    domain = ''
    token = win32security.LogonUser (
        username,
        domain,
        password,
        win32con.LOGON32_LOGON_SERVICE,
        win32con.LOGON32_PROVIDER_DEFAULT
    )
    win32security.ImpersonateLoggedOnUser(token)

    cmd = '<a command line programe>'
    cwd = '<a work dir>'
    env = os.environ
    priority = win32con.NORMAL_PRIORITY_CLASS
    startup = win32process.STARTUPINFO()

    (hProcess, hThread, dwProcessId, dwThreadId) = \
        win32process.CreateProcessAsUser(token, None, cmd, None, None, True, priority, env, cwd, startup)

    # win32process.GetExitCodeProcess(hProcess) == win32con.STILL_ACTIVE
    process = psutil.Process(dwProcessId)
    return_code = process.wait()
    print 'return code: %s' % str(return_code)
except win32security.error as e:
    print e
  • 要使上面的程序生效,首先需要使用一個(gè)windows service來執(zhí)行這個(gè)程序(目前我是這么測試的蛾坯,有人說也可以在命令行以administrator來運(yùn)行,但是我沒有測試成功)疏遏。關(guān)于Python創(chuàng)建Windows Service的方法脉课,可以參考我前面文章。
  • 要切換用戶執(zhí)行腳本财异,需要有被切換用戶的用戶名和密碼倘零。
  • 在用 CreateProcessAsUser API執(zhí)行命令后,可以通過 GetExitCodeProcess api 來檢查進(jìn)程狀態(tài)戳寸,如果返回結(jié)果是 win32con.STILL_ACTIVE呈驶,我們可以繼續(xù)等待。
  • 顯然疫鹊,通過 GetExitCodeProcess api來檢查進(jìn)程是否退出不是很好用袖瞻,所以這里我使用了psutil庫來等待進(jìn)程退出。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拆吆,一起剝皮案震驚了整個(gè)濱河市虏辫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锈拨,老刑警劉巖砌庄,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奕枢,居然都是意外死亡娄昆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門缝彬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萌焰,“玉大人,你說我怎么就攤上這事谷浅“歉” “怎么了奶卓?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撼玄。 經(jīng)常有香客問我夺姑,道長,這世上最難降的妖魔是什么掌猛? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任盏浙,我火速辦了婚禮,結(jié)果婚禮上荔茬,老公的妹妹穿的比我還像新娘废膘。我一直安慰自己,他們只是感情好慕蔚,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布丐黄。 她就那樣靜靜地躺著,像睡著了一般孔飒。 火紅的嫁衣襯著肌膚如雪孵稽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天十偶,我揣著相機(jī)與錄音菩鲜,去河邊找鬼。 笑死惦积,一個(gè)胖子當(dāng)著我的面吹牛接校,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狮崩,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蛛勉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了睦柴?” 一聲冷哼從身側(cè)響起诽凌,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坦敌,沒想到半個(gè)月后侣诵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狱窘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年杜顺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸炸。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躬络,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搭儒,到底是詐尸還是另有隱情穷当,我是刑警寧澤提茁,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站馁菜,受9級(jí)特大地震影響茴扁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜火邓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一丹弱、第九天 我趴在偏房一處隱蔽的房頂上張望德撬。 院中可真熱鬧铲咨,春花似錦、人聲如沸蜓洪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隆檀。三九已至摇天,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恐仑,已是汗流浹背泉坐。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裳仆,地道東北人腕让。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像歧斟,于是被迫代替她去往敵國和親纯丸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容