如何将VBScript转换为可执行(EXE)文件?

如何将VBScript转换为可执行(EXE)文件?,vbscript,executable,iexpress,Vbscript,Executable,Iexpress,我四处寻找将VBScript(*.vbs)转换为可执行文件的信息,并意识到大多数可用工具实际上都在将脚本包装到可执行文件中。尝试了一些工具,但效果不如预期。我尝试使用IExpress(在Windows XP中)创建Win32自解压cab文件,但在Windows 7机器上没有正确调用 因此,我正在寻找一种将vbs编译成exe的方法。我正在尝试将我当前的脚本移植到VB Express 2008中,但在此之前我对Visual Basic一无所知。有很多错误,但我仍在尝试 谁能给我一些建议,我该如何从这

我四处寻找将VBScript
(*.vbs)
转换为可执行文件的信息,并意识到大多数可用工具实际上都在将脚本包装到可执行文件中。尝试了一些工具,但效果不如预期。我尝试使用IExpress(在Windows XP中)创建Win32自解压cab文件,但在Windows 7机器上没有正确调用

因此,我正在寻找一种将vbs编译成exe的方法。我正在尝试将我当前的脚本移植到VB Express 2008中,但在此之前我对Visual Basic一无所知。有很多错误,但我仍在尝试

谁能给我一些建议,我该如何从这里开始?我的意思是,自解压归档文件会取代独立的可执行文件吗?但是像Winzip一样,我不知道如何让它在提取后运行脚本


有什么想法吗?

没有办法将VBScript(.vbs文件)转换为可执行(.exe文件),因为VBScript不是编译语言。调用将源代码转换为本机可执行代码的过程,像VBScript这样的脚本语言不支持该过程

当然,您可以使用WinZip之类的东西将脚本添加到自解压归档中,但所要做的就是压缩它。文件大小是否会明显缩小是值得怀疑的,因为它是一个纯文本文件,所以根本不需要压缩它。自解压存档的唯一目的是,最终用户的计算机上不需要解压软件(如WinZip)来解压或“解压”文件。如果它一开始没有被压缩,这是一个没有意义的观点

或者,正如您所提到的,有一些方法可以将VBScript代码文件包装到独立的可执行文件中,但这些只是包装器,当用户双击.exe文件时,它们会自动执行脚本(处于当前未编译状态)。我想这会有好处,但听起来不像你想要的

为了将VBScript真正转换为可执行文件,您必须用另一种可以编译的语言重写它。(在引入.NET Framework之前的最新版本VB)在语法上与VBScript极其相似,但支持编译为本机代码。如果将VBScript代码移动到VB6,则可以将其编译为本机可执行文件。运行.exe文件需要用户安装了,但它们内置在大多数版本的Windows中,现在在野外都可以找到


或者,您可以继续并跳转到,这在语法上与VB6和VBScript有些相似(尽管它不会接近剪切粘贴迁移)。VB.NET程序也将编译为.exe文件,但它们要求在用户计算机上安装.NET Framework运行时。幸运的是,这也变得司空见惯,如果你的用户没有它,它可以很容易地被重新分发。您在问题中提到了采用这种方法(将当前脚本移植到使用VB.NET的VB Express 2008中),但您遇到了很多错误。这就是我所说的它远离剪切粘贴迁移的意思。VB6/VBScript和VB.NET之间有一些巨大的差异,尽管在语法上有一些表面的相似之处。如果您想要帮助通过VBScript进行迁移,可以在这里发布有关堆栈溢出的问题。归根结底,这可能是做您想要的事情的最佳方式,但我不能保证它会很简单。

您可以使用VBSedit软件将VBS代码转换为.exe文件。您可以从Internet下载免费版本,并在系统上安装vbsedit应用程序,然后将文件转换为exe格式


Vbsedit是VBscripter的一个很好的应用程序

这里有几个可能的解决方案

我自己还没有试过所有这些,但我很快就会全部试过

注意:我与这些工具没有任何个人或财务联系

1) VB脚本到EXE转换器(非编译器):(免费)
.

生成的exe似乎是一个真正的exe

从他们的网站:

VBS到EXE是一个免费的在线转换器,它不仅可以将VBS文件转换为EXE,还可以:

1-使用128位密钥加密vbs文件源代码。
2-允许您调用win32 API
3-如果您在使用windows vista时遇到问题,尤其是在启用UAC时,那么您可以尝试使用VBS to EXE。
4-不再需要wscript.exe来运行vbs。
5-您的脚本从未像其他转换器一样保存到硬盘。它是一个真正的exe而不是提取器

即使计算机上未安装wscript/cscript,此解决方案也应能正常工作

基本上,这会创建一个真正的.EXE文件。在创建的.EXE中有一个“引擎”,它取代了wscript/cscript,以及VB脚本代码的加密副本。此替换引擎在内存中执行代码,而无需调用wscript/cscript


2) 编译VBS并将其转换为EXE…:

目前的版本是3.5

这不是一个免费的解决方案。他们有15天的试用期。在那之后,你需要花44.96美元(家庭许可/非商业)或89.95美元(商业许可/商业用途)购买许可证

它的工作方式似乎与前面的解决方案类似

根据那里的论坛帖子:
职位:“

如果使用了“编译”选项,则不需要WSH,因为ExeScript
实现它自己的脚本主机


3) 使用Microsoft的“.vbs to.vbe”加密工具对脚本进行加密

显然,这不适用于Windows 7/8,并且有可能存在“解密”.vbe文件的方法。在写这篇文章的时候
dir c:\Windows\Microsoft.NET\vbc.exe /a/s
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /t:winexe "%userprofile%\desktop\VBS2Exe.vb"
Imports System.Windows.Forms 

Partial Class MyForm : Inherits Form 

Private Sub InitializeComponent() 


End Sub

Public Sub New() 

InitializeComponent() 

End Sub

Public Shared Sub Main() 

Dim sc as object 
Dim Scrpt as string

sc = createObject("MSScriptControl.ScriptControl")

Scrpt = "msgbox " & chr(34) & "Hi there I'm a form" & chr(34)

With SC 
.Language = "VBScript" 
.UseSafeSubset = False 
.AllowUI = True 
End With


sc.addcode(Scrpt)


End Sub

End Class
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /t:winexe /win32manifest:"%userprofile%\desktop\VBS2Exe.manifest" "%userprofile%\desktop\VBS2Exe.vb"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" 
  processorArchitecture="*" name="VBS2EXE" type="win32" /> 
  <description>Script to Exe</description> 
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
  <security> <requestedPrivileges> 
  <requestedExecutionLevel level="requireAdministrator" 
  uiAccess="false" /> </requestedPrivileges> 
  </security> </trustInfo> </assembly>
Imports System.Windows.Forms 

Partial Class MyForm : Inherits Form 

Private Sub InitializeComponent() 


End Sub 

Public Sub New() 

InitializeComponent() 

End Sub 

Public Shared Sub Main() 

Dim sc as object
Dim Scrpt as string 

sc = createObject("MSScriptControl.ScriptControl") 

Scrpt = "msgbox " & chr(34) & "Hi there I'm a form" & chr(34) & ":msgbox meScript.state" 

With SC
.Language = "VBScript"
.UseSafeSubset = False
.AllowUI = True
.addobject("meScript", SC, true)
End With 


sc.addcode(Scrpt) 


End Sub 

End Class 
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /t:winexe /win32manifest:"%userprofile%\desktop\VBS2Exe.manifest" /win32resource:"%userprofile%\desktop\VBS2Exe.res" "%userprofile%\desktop\VBS2Exe.vb"
InitScriptControl()
SCtr_AddCode("MsgBox 1")