簡體   English   中英

通過vbscript或bat文件調用python啟動新進程時獲取未修改的環境變量

[英]Getting unmodified enviromental variables when starting new process via vbscript or bat file call to python

我有一個應用程序,該應用程序具有無法控制的環境變量,並且已從“默認”環境變量中進行了修改,這些應用程序是從cmd或Explore(或其他)啟動時給出的。 我的應用程序允許我運行vbscripts,但是這些腳本使用了父應用​​程序的環境變量,這沒關系。 我想使用vbscript從大多數應用程序從cmd或explorer(或其他)啟動時獲得的“正常” /“默認”環境變量來啟動python。 我試圖使用vbscript調用運行python的bat文件,但是python仍在維護其祖父母的環境變量。

如何在不將其“已修改”環境變量傳遞給子級的情況下讓vbscript調用應用程序(python)? 我也嘗試過使用start /i ,但是由於vbscript的父級在vbscript啟動之前修改了其變量,因此不會重置為干凈的環境。

我的VBScript看起來像這樣:

sub run

  dim wshShell

  Set wshShell = CreateObject( "WScript.Shell" )

  Dim cmd
  cmd = ""
  cmd = cmd & chr(34) ' double quote character'
  cmd = cmd & "startPython.bat"
  cmd = cmd & chr(34) 

  wshShell.run( cmd )
end sub

我的應用程序將使用修改后的不良環境變量啟動run子例程。

startPython.bat文件如下所示:

  start /i python "python3file.py" %*

  rem pause

批處理文件不是必需的,但似乎可以打破環境鏈,但事實並非如此。

最后,我想讓vbscript使用“默認” /“正常”環境變量來啟動python,該環境變量將給出用戶通過cmd或Explorer啟動的新應用程序(我不挑剔它們的年齡。 ,或者它們是操作系統啟動變量,或者是在任何cmd或資源管理器或用戶啟動之前的啟動過程中稍作修改的變量,這些修改是可以接受的,但是我的父應用程序所做的修改應該被刪除。

(也很重要的一點是,父級的會話環境變量不要更改,但是在頁面溢出和其他讀數之后,無論如何這似乎都是困難的(並且不推薦)。)

(我知道它們不是一組“默認”或“正常”的環境變量,但是存在系統級別和用戶級別,只要我不使用會話變量,這兩種情況在我的情況下都是可以接受的可以接受的解決方案還包括“竊取”環境變量的副本,但是最好使用一組新的OS生成的環境變量(系統級別或用戶級別類型)。

理想的解決方案將僅限於vbscript(可選通過bat文件)以使用干凈的環境變量集啟動python。

編輯其他更新:

根據哈里·約翰斯頓的建議:

我試着通過修改VBScript來使用ShellExecute,如下所示:

  dim objShell
  set objShell = CreateObject("shell.application")
  objShell.ShellExecute cmd , "" , "blahBlahBlah"  
  set objShell = nothing

基於msdn鏈接的建議,但是我正在設置獲取修改后的環境變量會話。

(我也刪除/然后在情況下,他們都拿到父母會話變量的批處理腳本文件開始 。)

您需要shell.application對象的ShellExecute方法。

這將導致Windows Shell(或多或少又稱為Windows資源管理器)代表您打開指定的應用程序或文件。 這意味着新啟動的應用程序將獲得一組新的環境變量,就像您通過雙擊資源管理器啟動它一樣。

環境變量的繼承是Windows的內置概念。 但是,任何調用CreateProcess()函數的人都可以為該進程指定環境變量( lpEnvironment )。 問題是:如何知道默認環境變量是什么?

我目前看到的唯一解決方法是在任務計划程序中創建任務,並由任務計划程序而不是您自己的應用程序執行命令。 該方法假定任務調度程序是用一組原始環境變量啟動的。 您需要的命令:

schtasks /create ...
schtasks /run ...
schtasks /delete ...

全部設置有點棘手。 我無法確定是否可行,但也許您可以嘗試一下。

暫無
暫無

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

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