在VBScript中预加载程序以提高执行效率

在VBScript中预加载程序以提高执行效率,vbscript,Vbscript,我有一个VBS脚本(实际上编译为.exe),它使用VBS运行指令调用另一个程序(.exe)。我的大型机思维告诉我,在我的脚本开始时预加载第二个程序是有益的,这样在需要时它就可以立即使用。通常在大型机上,在适当的时候,人们会在某个点将程序加载到内存中,然后再进行分支 VBS中是否存在此概念 感谢您的建议。在挂起状态下启动程序很容易,但我仍然没有找到一种方法,可以在没有外部工具的情况下(我们需要调用API)继续执行程序。对于这个示例,我使用了WindowsSysInternal的工具来恢复这个过程

我有一个VBS脚本(实际上编译为.exe),它使用VBS运行指令调用另一个程序(.exe)。我的大型机思维告诉我,在我的脚本开始时预加载第二个程序是有益的,这样在需要时它就可以立即使用。通常在大型机上,在适当的时候,人们会在某个点将程序加载到内存中,然后再进行分支

VBS中是否存在此概念


感谢您的建议。

在挂起状态下启动程序很容易,但我仍然没有找到一种方法,可以在没有外部工具的情况下(我们需要调用API)继续执行程序。对于这个示例,我使用了WindowsSysInternal的工具来恢复这个过程

选项显式
常数SW_NORMAL=1
常数CF\u创建\u挂起=4
Const PROCESS_NAME=“Notepad.exe”
'实例化所需的对象
薄壳
设置wmi=GetObject(“winmgmts:{impersonationLevel=impersonate}!\\。\root\cimv2”)
Set shell=WScript.CreateObject(“WScript.shell”)
'准备进程的启动配置
' https://msdn.microsoft.com/en-us/library/aa394375%28v=vs.85%29.aspx
暗启动
设置startUp=wmi.Get(“Win32_ProcessStartup”).SpawnInstance_
启动时
.ShowWindow=SW_正常
.CreateFlags=CF_CREATE_SUSPENDED
以
"启动进程"
' https://msdn.microsoft.com/en-us/library/aa394372%28v=vs.85%29.aspx    
Dim retCode,进程ID
retCode=wmi.Get(“Win32_进程”).Create(进程名称,Null,启动,进程ID)
如果代码为0,则
Wscript.Echo“进程创建失败:”&retCode
WScript.Quit 1
如果结束
Echo“使用PID创建的进程:”&processID
'请操作系统检查是否存在我们的流程
WScript.Echo shell.Exec(“tasklist/fo:list/v/fi”“imagename eq”“PROCESS_NAME&”“).StdOut.ReadAll()
'等待(不需要,仅用于测试)
WScript.Sleep 5000
'继续进程-需要SysSuspend
' https://technet.microsoft.com/en-us/sysinternals/pssuspend.aspx
调用shell.Run(“pssupend64.exe/accepteula-r”&processID,0,False)
'等待进程恢复并再次显示任务列表
WScript.Sleep 2000
WScript.Echo shell.Exec(“tasklist/fo:list/v/fi”“imagename eq”“PROCESS_NAME&”“).StdOut.ReadAll()

您不能在VBScript中通过Run(或任何其他方式)预加载正在启动的可执行文件。这一点很清楚。谢谢。谢谢,但我怀疑开销可能会超过收益,特别是因为。。。我一直在使用两种方法之一来编译脚本:1。vbsedit2。VBS_to_exe我开始专门使用后者,因为我注意到它生成的文件比前者小得多。然而,当我在这里继续发布我的原始帖子时,(由于我执行脚本(由VBS-to_exe创建)时出现明显的延迟),我使用VBSEdit重新编译了脚本,不料,延迟大大减少,基本上已不再是问题。我很满意:)@BillFriedman,虽然没有找到一种纯粹的wmi原生方法,但几乎没有任何好处(取决于具体的可执行文件)。我发现这个问题很有趣,决定测试并发布我的发现。感谢您提出的不同方法。