【发布时间】:2015-10-30 02:53:24
【问题描述】:
我有一个系统通过 WSF 启动大约 50 个 VBS 脚本,这些脚本需要留在那里直到系统的另一部分连接到它们,然后它们充当服务器一段时间,直到对等方断开连接,然后它们退出并获取重新启动。
出于初始化目的,它们都使用 EXCEL.EXE 从电子表格中读取大量参数,通过
Set objExcel = CreateObject("Excel.Application")
我们不能同时运行 50 个 EXCEL.EXE,因此重新启动是按顺序进行的,因此运行的 EXCEL.EXE 不应超过一个:通常为零,因为它们仅用于 15-20秒,然后释放。
但是,有时会出现问题,WSF 脚本退出,而它启动的 EXCEL.EXE 仍然存在。所以我们确实看到了多达十几个 EXCEL.EXE 进程。
我的问题是关于使用GetObject() 而不是CreateObject()。是否可以使用GetObject(),以便如果已经有一个 EXCEL.EXE 正在运行,它会使用那个而不是启动一个新的?如果需要,还需要哪些其他步骤?
这里还有一个补充问题,关于为什么 EXCEL.EXE 在启动它们的 VBS 退出后仍然存在,但我可以想象 VBS 可以退出(或被杀死)的方式来允许它。
请注意,这个问题也部分与 EXCEL.EXE 的重入有关,我对此一无所知。
我不是这些脚本的作者,而且就外部对象而言,我在 VBS 方面的能力不是很强,所以我完全有可能在这里问一个琐碎的问题。
【问题讨论】:
-
你有没有看过How to use GetObject in VBScript,要获得正在运行的实例,你应该能够执行
Set objExcel = GetObject( , "Excel.Application")之类的操作。 -
这个问题有问题吗?有人吗?
-
奇怪。也许有些人只是在标题中看到“Excel”,并且在没有正确阅读问题的情况下盲目(并且错误地)投反对票,理由是 Excel 与编程无关。但这只是一个猜测,我根本看不出这个问题有什么问题。
标签: windows excel vbscript activex wsh