簡體   English   中英

Python以管理員身份啟動子進程,而無需將進程稱為管理員

[英]Python starting subprocess as admin without calling process being admin

我試圖用python編寫一個包含以下部分的程序:

  1. 配置工具
  2. 硬件監視器
  3. 后台進程

想法是,一旦安裝(使用cx_freeze)硬件監視器后,它就會一直在后台運行,當連接了一塊兼容的硬件(對於FTDI設備使用d2xx驅動程序)時,它會檢查注冊表,以查看其是否先前已配置,是否然后,它以序列號作為參數啟動后台進程,但是如果沒有,它將啟動config實用程序。

但是,硬件監視器需要從啟動時開始運行,因為它僅從注冊表中讀取並不需要完整的管理員權限,而后台進程僅需讀取,因此也不需要管理權限,但是config實用程序需要能夠寫入注冊表,因此需要管理員。

我的問題是這樣的:如何在python中以admin身份並使用參數調用另一個程序?

我考慮使用os.startfile,因為我已將凍結程序設置為需要管理員,但是我隨后無法將參數傳遞給它。

我也考慮過使用subprocess.Popen,但是我不知道如何將它提升到管理級別,即使可以,也無法將其提升到管理員級別,因此盡管它會打開程序並將無法寫入注冊表的參數傳遞給它。

任何幫助將不勝感激,有關進一步的信息,我的設置是:

  1. Windows 7 64位(但也計划做XP 32位)
  2. python2.7.6(還是64位,但計划也要32位)
  3. PyUSB-1.6
  4. psutil-1.2.1
  5. cx_freeze-4.3.2

謝謝

詹姆士

經過大量的尋找,我找到了解決方案,我嘗試使用:

  1. 操作系統
  2. os.start文件
  3. subprocess.call
  4. 子進程

最后是os.system

因為os.system本質上與在命令行上鍵入或將參數放入批處理文件中,然后執行它相同,這要求可執行文件具有默認權限,所以唯一的缺點是,當UAC窗口出現時,我會得到一個shell窗口出現,直到打開的程序關閉。

其他解決方案的問題是:

1-僅傳遞調用應用程序的權限,而不管被調用應用程序需要什么。

2-要求更高級別的權限,但沒有傳遞參數的機制

3-與1相同

4-與1相同

如果有人可以推薦一種防止外殼窗口的機制,將不勝感激。

詹姆士

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM