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

时间:2010-12-13 03:52:17

标签: vbscript executable iexpress

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

所以我正在寻找一种将vbs编译成exe的方法。我正在尝试将当前脚本移植到VB Express 2008中,但我在此处没有Visual Basic的先验知识。有很多错误,但我仍在努力。

有人可以建议我如何从这里开始?我的意思是,自解压存档是否可以替代独立可执行文件?但是说像Winzip我不知道如何让它在提取后运行脚本。

有什么想法吗?

6 个答案:

答案 0 :(得分:18)

无法将VBScript(.vbs文件)转换为可执行文件(.exe文件),因为VBScript 不是编译语言转换过程源代码到本机可执行代码中称为"compilation",并且脚本语言不支持它,如VBScript。

当然,您可以使用WinZip之类的东西将脚本添加到自解压存档中,但所有这些操作都会压缩它。令人怀疑的是文件大小会明显缩小,因为它是一个纯文本文件,所以根本不需要压缩文件。 自解压存档的唯一目的是在最终用户的计算机上不需要解压缩软件(如WinZip),以便提取或“解压缩”文件。如果它首先没有压缩,这是一个没有实际意义的点。

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

为了真正将您的VBScript转换为可执行文件,您将不得不用另一种可以编译的语言重写它。 {{3} (在引入.NET Framework之前,最新版本的VB)在语法上与VBScript非常相似,但支持编译为本机代码。如果将VBScript代码移动到VB 6,则可以将其编译为本机可执行文件。运行.exe文件将要求用户安装了Visual Basic 6,但它们内置于大多数Windows版本中。

或者,你可以继续跳转到VB 6 Run-time libraries,它在语法上与VB 6和VBScript有些相似(尽管它不会在任何地方附近 - 和粘贴迁移)。 VB.NET程序也将编译为.exe文件,但它们需要在用户的计算机上安装.NET Framework运行时。幸运的是,这也变得司空见惯,如果您的用户没有碰巧,它可以很容易地重新分发。您提到在您的问题中使用此路由(将当前脚本移植到使用VB.NET的VB Express 2008),但是您遇到了很多错误。这就是我的意思,它远非剪切和粘贴迁移。 VB 6 / VBScript和VB.NET之间存在一些巨大的差异,尽管有一些表面的语法相似之处。如果您需要帮助迁移VBScript,可以在Stack Overflow上发布问题。最终,这可能是做你想做的最好的方式,但我不能保证你会很简单。

答案 1 :(得分:14)

您可以使用VBSedit软件将您的VBS代码转换为.exe文件。您可以从Internet和installtion vbsedit applilcation下载免费版本,并将文件转换为exe格式。

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

答案 2 :(得分:2)

以下是几种可能的解决方案......

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

注意:我与这些工具之间没有任何个人或财务关系。

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

产生的exe似乎是一个真正的EXE。

从他们的网站:

  

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

     

1-使用128位密钥加密您的vbs文件源代码    2-允许你调用win32 API
   3-如果您在使用Windows Vista时遇到麻烦,尤其是在启用UAC的情况下,您可以试试VBS    4-不再需要wscript.exe来运行你的vbs了    5-您的脚本永远不会像其他转换器一样保存到硬盘上。它是一个真正的exe而不是一个提取器。

即使计算机上未安装wscript / cscript,此解决方案也应该有效。

基本上,这会创建一个真正的.EXE文件。在创建的.EXE内部是一个“引擎”,它取代了wscript / cscript,以及VB脚本代码的加密副本。此替换引擎执行您的代码IN MEMORY而不调用wscript / cscript来执行此操作。


2)编译并将VBS转换为EXE ...:
ExeScript

目前的版本是3.5。

这不是免费解决方案。他们有15天的试用期。之后,您需要购买高达44.96美元(家庭许可证/非商业用途)或89.95美元(营业执照/商业用途)的许可证。

它似乎与之前的解决方案类似。

根据论坛帖子:
发布:“A Exe file still need Windows Scripting Host (WSH) ??

  

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


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

显然,这对Windows 7/8不起作用,并且有可能有“解密”.vbe文件的方法。在撰写本文时,我找不到可以下载的工作链接。如果我找到一个,我会将其添加到这个答案中。

答案 3 :(得分:2)

更多信息

要查找编译器,您将安装1个.net版本,键入命令提示符。

dir c:\Windows\Microsoft.NET\vbc.exe /a/s

Windows窗体

对于Windows窗体版本(没有控制台窗口,我们无法实际创建任何窗体 - 尽管您可以,如果您愿意)。

在命令提示符中编译行。

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /t:winexe "%userprofile%\desktop\VBS2Exe.vb"

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

使用这些可选参数可为您提供图标和清单。清单允许您指定正常运行,如果管理员运行提升,则仅运行提升。

/ win32icon:指定默认Win32资源的Win32图标文件(.ico)。

/ win32manifest:提供的文件嵌入在输出PE的清单部分中。

理论上,我关闭UAC所以无法测试,但将此文本文件放在桌面上并将其命名为vbs2exe.manifest,另存为UTF-8。

命令行

"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>

希望它现在只能以管理员身份运行。

授予对主机对象的访问权限

这是一个让vbscript访问.NET对象的示例。

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 

嵌入版本信息

https://skydrive.live.com/redir?resid=E2F0CE17A268A4FA!121下载vbs2exe.res文件并放在桌面上。

http://www.angusj.com/resourcehacker

下载ResHacker

在ResHacker中打开vbs2exe.res文件。编辑。单击“编译”按钮。单击文件菜单 - 保存。

输入

"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"

答案 4 :(得分:0)

您可以使用PureBasic和MsScriptControl

执行此操作

您需要做的就是将MsScriptControl粘贴到Purebasic编辑器并在下面添加如下内容

InitScriptControl()
SCtr_AddCode("MsgBox 1")

答案 5 :(得分:0)

您可以尝试VbsEdit。从Adersoft的VbsEdit http://www.vbsedit.com获取最新版本,只需一点点下载,但它是一个功能强大的工具,用于创建和编辑vbs文件并将其转换为可执行文件,而无需解压缩到临时文件夹。 (除非你得到版本4.xxx之类的旧版本)我自2008年以来一直在使用这个程序,并且它可以自由地进行永久评估,但会提示激活,每次启动脚本时都会在vbsedit窗口你必须等待几秒钟,或者你可以花60美元购买它以消除那些轻微的烦恼。
与ScriptCryptor 不同,如果您仍在评估转换后的exe文件没有任何限制,它将在没有任何不需要的额外窗口的情况下运行。