如何在.exe中调用和执行VBScript命令和函数?
这个问题可能有点愚蠢,但我很好奇这是否可能。 我有一个名为library.xxx(包含vbscript代码)的文件,其中包含预定义的函数。我还有一个文件test.vbs(也包含vbscript代码,这里我使用的函数是library.xxx中定义的)。在test.vbs中,库是“包含的”,这意味着我可以使用library.xxx中的函数。例如,有一个名为ProgramFiles的函数,如果我在test.vbs中调用它,我将收到Program Files文件夹位置 问题是library.xxx以这种方式可见。有一个名为ScriptCryptor的应用程序。有了这个应用程序,我可以打开我的library.xxx并生成一个.exe,这对我来说会更好,因为它不是清晰的文本 我现在的问题是,如何执行test.vbs中调用的命令?我想我应该逐行读取test.vbs文件,并以某种方式处理它。但是怎么做呢?我怎么知道我读的这行是函数还是变量?或者两者都有?如何处理它们 有什么办法吗 希望我想要的是可以理解的如何在.exe中调用和执行VBScript命令和函数?,vbscript,Vbscript,这个问题可能有点愚蠢,但我很好奇这是否可能。 我有一个名为library.xxx(包含vbscript代码)的文件,其中包含预定义的函数。我还有一个文件test.vbs(也包含vbscript代码,这里我使用的函数是library.xxx中定义的)。在test.vbs中,库是“包含的”,这意味着我可以使用library.xxx中的函数。例如,有一个名为ProgramFiles的函数,如果我在test.vbs中调用它,我将收到Program Files文件夹位置 问题是library.xxx以这种
谢谢 到目前为止,实现这一点最简单的方法是在“test.vbs”文件中包含“library.vbs” 例如: Library.vbs:
Function ProgramFiles()
ProgramFiles = "C:\Foo"
End Function
test.vbs:
sub includeFile (fSpec)
dim fileSys, file, fileData
set fileSys = createObject ("Scripting.FileSystemObject")
set file = fileSys.openTextFile (fSpec)
fileData = file.readAll ()
file.close
executeGlobal fileData
set file = nothing
set fileSys = nothing
end sub
includeFile "library3.vbs"
wscript.echo ProgramFiles
你的问题似乎表明你可能已经这样做了,如果你是那么我道歉
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
如果明文真的困扰着你,那么从我所看到的来看,没有办法让ScryptCryptor的可执行文件对你的vbscript可用
相反,您可以创建一个COM库DLL,用作test.vbs文件中的对象
这样做的缺点是有必要学习一门新的语言。Visual Studio Visual Basic当然不同于Windows Shell脚本Visual Basic,但它可以满足您的需要
采取的步骤:
公共类库
Private userNameValue As String
Public Const ClassId As String = "40491A82-D53A-46A6-B7E0-1CDF78A33AB6"
Public Const InterfaceId As String = "B49C996C-B039-471D-BF17-0DDA5B3CF517"
Public Const EventsId As String = "6245E3DD-DEB5-4B75-AC03-F4430BC18FDE"
Public Sub New()
MyBase.New()
End Sub
Public Sub mycopy(mySource As String, myDest As String)
My.Computer.FileSystem.CopyFile(mySource, myDest, True)
End Sub
End Class
Set myLib = CreateObject("ClassLibrary1.OurLibrary")
mySource = "C:\mytextfile1.txt"
myDest = "C:\mytextfile2.txt"
myLib.mycopy mySource, myDest
如果需要将like me test.vbs称为C:\Windows\SysWOW64\cscript.exe test.vbs
有关在Visual Basic中创建COM类的详细信息,请参见此处:是的,您是对的。我现在就是这么做的,但是明文是个大问题。使用ScriptCryptor生成的.exe teest.vbs,作为exe参数的内容我可以使用这些函数。效果很好。问题是“只有”复杂的陈述。如果我读了一行,我可以使用Execute或ExecuteGlobal来执行当前行,但是如果该行是一个复杂的语句,并且语法停留在更多的行中,那么我将得到一个语法错误。示例`如果Architecture=“x86”那么a=10 b=4否则a=0 b=0 End If`在本例中,如果我读取一行并执行它,我会得到一个……语法错误,因为没有Else或End If。我在艰难的路上想。也许可以编写一个小函数来读取该行,如果没有结束if,则读取它直到找到为止,将该行存储在变量中,然后执行它。这在理论上是可行的。但处理每种可能的语法并不是那么简单。理论上,这会满足我的要求。但谁知道我忘记了哪件事呢?:)我必须在第一个注释中尝试一下,我想把它写在不同的行中。