繁体   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