2009-06-30 61 views
0

要將所有VBS大師那裏...理念,讓公共代碼

我已經寫了一套VB腳本(用於自動安裝,如果你必須知道),它使用一組常用功能對於像日誌記錄,啓動/停止服務等東西。

我想出了一個使用腳本的設計,該腳本包含一個類中的常用功能。它還聲明和實例化類類型的變量。
我也有一個'loader'腳本,用於檢查類對象是否存在,如果不存在,則運行類腳本。

我編寫的每個腳本都包含對加載器的調用,然後我可以調用實例化類的方法。

這是一個相當整潔的解決方案(恕我直言),但我想知道如果有人有任何其他/更好的方式實現相同?

- 皮特

注:這僅適用於VB腳本的.vbs文件

+0

聽起來很整齊,聽起來很複雜也是如此。你可能已經處理的一件事是確保所有的路徑都是相對的,所以你可以移動裝載程序和不在附近的東西。 – JoshBerke 2009-06-30 18:07:26

+0

乾杯喬希。我曾嘗試過,但是當腳本包含另一個腳本(使用.OpenTextFile)時,Wscript。包含腳本中的ScriptFullName將返回調用腳本的路徑,而不是調用腳本的路徑,因此除非相對於調用腳本,否則不可能相對調用任何內容,除非更改當前目錄,而我不想這樣做它可能會影響其他程序。 這聽起來很複雜,但實際上很簡單,並允許建立一個有用的庫 – FrinkTheBrave 2009-07-17 09:53:45

回答

0

我們在VB5實現相同。

在我們的應用程序中,VB腳本用於自定義業務規則甚至UI。有一個合適的文件結構,例如基類位於base \文件夾中。

當VB應用程序運行時,我們使用MSScript控件來運行腳本。初始化步驟是加載VBS文件的名稱並在內存中創建一個關聯樹。然後,當VB需要調用某個腳本(例如CreateNewCustomer())時,會通知引擎它應該加載到MSScript 2文件中:CreateNewCustomer.vbs和base \ CreateNewCustomer.vbs在這種情況下,我們實現了一些讓我們在VBScript中使用繼承。

此外,對我們的COM類VBScriptEngine的引用也傳遞給了MSScript控件。 所以在任何VBScript中我們可以稱之爲VBScriptEngine.ExecuteScript(「CreateNewCustomer」,則params),並再次可以執行其他的VBScript

什麼是這個任務的挑戰是,我們不希望創建和初始化實例太多的MSScript控件,但MSScript控件無法在當前腳本未完成時執行其他腳本。所以在我們的VBScriptEngine中我們有腳本執行堆棧。如果任何VBScript需要調用另一個VBScript,我們需要創建一個新的MSScript控件並將其放入堆棧。有時我們有需要3個或更多MSScript控件同時嵌套的調用

是的所有這些現在看起來很奇怪,當時.NET中的動態語言或動態程序集可以用較少的努力獲得更好的結果。早在2006年

0

,我使用「執行」和「的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