关于VBS结构的想法允许使用通用代码

时间:2009-06-30 17:47:16

标签: vbscript

对那里的所有VBS大师......

我编写了一套VB脚本(用于自动安装,如果你必须知道),它们使用一组常用函数来记录,启动/停止服务等。

我想出了一个使用脚本的设计,该脚本包含类中的常用函数。它还声明并实例化类类型的变量 我还有一个'loader'脚本,它检查类对象是否存在,如果不存在,则运行类脚本。

我编写的每个脚本都包含对加载器的调用,然后我可以调用实例化类的方法。

这是一个非常简洁的解决方案(恕我直言),但我想知道是否有人有任何其他/更好的方法来实现同样的目标?

- 皮特

注意:这仅适用于.vbs文件中的VB脚本

2 个答案:

答案 0 :(得分:0)

我们在VB5中实现了相同的目标。

在我们的应用程序中,VB脚本用于自定义业务规则甚至UI。有一个适当的文件结构,例如基类位于base \ folder。

当VB应用程序运行时,我们使用MSScript控件来运行脚本。初始化步骤是加载VBS文件的名称,并在内存中创建关联树。然后当VB需要调用某些脚本时,例如CreateNewCustomer(),一个引擎被告知它应该加载MSScript 2文件:CreateNewCustomer.vbs和base \ CreateNewCustomer.vbs

在这种情况下,我们实现了一些允许我们在VBScripts中使用继承的东西。

此外,对我们的COM类VBScriptEngine的引用也被传递给MSScript控件。 所以在任何VBScript中我们都可以调用VBScriptEngine.ExecuteScript(“CreateNewCustomer”,params),它又可以执行另一个VBScript

这项任务的挑战是我们不想创建和初始化太多的MSScript控件实例,但是当前脚本没有完成时,MSScript控件无法执行另一个脚本。所以在我们的VBScriptEngine中我们有脚本执行堆栈。如果任何VBScript需要调用另一个VBScript,我们需要创建一个新的MSScript控件并将其放入堆栈中。有时我们有嵌套调用,需要同时进行3个或更多MSScript控件

是的,现在看来,当.NET中的动态语言或动态程序集用来以更少的努力获得更好的结果时,这一切似乎都很奇怪。

答案 1 :(得分:0)

早在2006年,我使用“执行”和“OpenTextFile”提出了以下解决方案:

   Execute library( "lib-util-1.0.4.vbs")

   '---BEGIN--------------------------------------
   logger left(getScriptName(),len(getScriptName())-4)&".log" : msgLog "" '-- blank line
   msgLog "Running... ("&getScriptName()&")" 

   '<YOUR SCRIPT GOES HERE>

   '-- fini
   ExitProcess Null, 0
   '---END----------------------------------------


   '-- Import library into memory (2006.07.21/1.0.0/RRR)
   Function library( ByVal libname)
      dim libf:set libf=CreateObject("Scripting.FileSystemObject"):if not libf.fileExists(libname) then wscript.stdOut.write " Error: Could not locate library: "&libname:WScript.Quit( 1)
      library=libf.OpenTextFile(libname,1).ReadAll()
   End Function

更多示例位于此处:http://github.com/randollr/LVA