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

19

我曾经查询过将VBScript (*.vbs) 转换为可执行文件的信息,发现大部分可用工具实际上是将脚本包装到可执行文件中。尝试了几个工具后发现效果并不理想。我尝试使用IExpress(在Windows XP中)创建Win32自解压缩cab文件,但它在Windows 7机器上没有正确运行。

因此,我正在寻找一种将vbs编译为exe的方法。我正尝试将我的当前脚本移植到VB Express 2008中,但我对Visual Basic没有任何先前的知识。虽然出现了很多错误,但我仍在努力尝试。

请问有什么建议吗?我是说,是否应该选择自解压缩存档而不是独立的可执行文件呢?但像Winzip那样,我不知道如何在解压缩后运行脚本。

有什么想法吗?


1
可能是VBscript编译器的重复问题。 - Helen
使用软件vbsedit - willy wonka
6个回答

21

无法将VBScript(.vbs文件)转换为可执行文件(.exe文件),因为VBScript不是一种编译语言。将源代码转换为本机可执行代码的过程称为“编译”,而像VBScript这样的脚本语言不支持此功能。

当然,您可以使用类似WinZip之类的工具将脚本添加到自解压缩存档中,但这只会将其压缩。文件大小很可能不会显著缩小,并且由于它本来就是一个纯文本文件,所以根本没有必要进行压缩。自解压缩存档的唯一目的是,在最终用户的计算机上不需要解压缩软件(如WinZip)即可提取或“解压缩”文件。如果文件一开始就没有被压缩,那么这是一个无意义的点。

或者,正如您提到的那样,有一些方法可以将VBScript代码文件包装在独立的可执行文件中,但这些只是包装器,当用户双击.exe文件时自动执行脚本(处于当前未编译状态)。我想这可能有其好处,但这似乎不是您要寻找的东西。

为了真正将您的VBScript转换为可执行文件,您需要将其重写为另一种可以“编译”的语言。Visual Basic 6(在引入.NET Framework之前的最新版本)语法与VBScript非常相似,但支持编译为本机代码。如果您将VBScript代码移动到VB 6中,则可以将其编译成本机可执行文件。运行.exe文件将要求用户安装 VB 6运行时库,但它们内置于大多数现有的Windows版本中。
或者,您可以直接跳到Visual Basic .NET,它仍然与VB 6和VBScript在语法上有些相似(虽然不会完全迁移)。VB.NET程序也将编译为.exe文件,但需要在用户计算机上安装.NET Framework运行时。幸运的是,这也已经变得很常见,并且如果用户没有安装它,可以轻松重新分发它。您在问题中提到了采用这种方法(将当前脚本移植到使用VB.NET的VB Express 2008中),但遇到了很多错误。这就是我所说的与剪切和粘贴迁移相去甚远。尽管具有一些表面的语法相似之处,但VB 6/VBScript和VB.NET之间存在一些巨大的差异。如果您需要帮助迁移您的VBScript,可以在Stack Overflow上发布问题。最终,这可能是实现您想要的功能的最佳方法,但我不能保证它会简单。

@Cody:不错,我会尝试使用你提供的链接来实现它。对我来说(端口)有效,但我相当确定我没有使用正确的语法/约定来声明(例如Wshso = CreateObject("WScript.Shell"))。我想我需要学习VB Express的做事方式。 - Alex Cheng
嗯,我不理解MSDN的编码,我做了这个: Dim locale As System.Globalization.CultureInfo 然后 locale = System.Globalization.CultureInfo.CurrentCulture() 之后我从那里操作 locale - Alex Cheng
@Alex:没错,那个方法可行。如果你只需要区域标识符,可以使用以下代码:Dim locale As Integer = System.Globalization.CultureInfo.CurrentCulture.LCID。正如你所看到的,VB.NET 中有些东西与其他语言不同,例如共享/静态类,你无需实例化即可访问它们的属性或方法。 - Cody Gray
1
@Alex:我认为没有官方的.NET方法来做到这一点,因为你正在使用为VBScript设计的函数。正如你已经发现的那样,这将起作用,如果这是一个简单的脚本,你可能想保持它这样。我不知道其他网站在提倡什么,但正确的.NET方式可能取决于你对WScript.Shell对象要做什么,而不是改变你创建它的方式。 - Cody Gray
1
+1 这是一个非常好的答案! - user2140173
显示剩余5条评论

18
您可以使用VBSedit软件将您的VBS代码转换为.exe文件。您可以从互联网上下载免费版本,并在您的系统上安装vbsedit应用程序并将文件转换为exe格式。
Vbsedit是VB脚本程序员的好工具。

这是链接,同样也可以访问http://www.vbsedit.com/。 - billaraw
VBSedit 制作 exe 程序非常容易! - user3513237
2
很遗憾,评估版本仅支持编辑器。VBS到EXE可以工作,但当我们调用EXE时,会弹出一个要求购买许可证的窗口。 - PravyNandas

3

更多信息

如果要查找编译器,您需要针对每个已安装的 .net 版本执行以下命令:

在命令提示符中键入。

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

Windows Forms

Windows Forms版本(无控制台窗口,我们实际上不创建任何表单 - 虽然您可以这样做)。

在命令提示符中编译以下行。

"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 

嵌入版本信息

下载vbs2exe.res文件,网址为https://skydrive.live.com/redir?resid=E2F0CE17A268A4FA!121 ,将其放置在桌面上。

下载ResHacker,网址为http://www.angusj.com/resourcehacker

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

3
以下是可能的解决方案:
我还没有尝试过所有这些解决方案,但我很快就会尝试它们。
注意:我与这些工具没有任何个人或财务联系。
1)VB脚本到EXE转换器(非编译器):(免费) vbs2exe.com
生成的exe似乎是真正的EXE。
从他们的网站上可以看到:
VBS to EXE是一个免费的在线转换器,不仅可以将您的vbs文件转换为exe,还可以:
1-使用128位密钥加密您的vbs文件源代码。
2-允许您调用win32 API
3-如果您在启用UAC时遇到Windows Vista的问题,则可以尝试VBS to EXE。
4-不再需要wscript.exe来运行您的vbs。
5-您的脚本不像其他一些转换器那样被保存到硬盘上。它是一个真正的exe而不是提取器。
这个解决方案即使计算机上没有安装wscript/cscript也可以工作。基本上,它创建了一个真正的.EXE文件。在创建的.EXE文件内部有一个“引擎”,用来替换wscript/cscript,并且还有您VB脚本代码的加密副本。这个替代引擎在内存中执行您的代码,而不是调用wscript/cscript来执行它。

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

当前版本为3.5。

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

它似乎以类似于以前的解决方案的方式工作。

根据一个论坛帖子:
Post: "一个Exe文件仍然需要Windows脚本宿主(WSH)吗?"

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


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

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


0

您可以使用PureBasic和MsScriptControl来完成此操作。

您只需将MsScriptControl粘贴到Purebasic编辑器中,然后添加以下内容即可:

InitScriptControl()
SCtr_AddCode("MsgBox 1")

0

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


很遗憾,评估版本仅支持编辑器。VBS转EXE可以工作,但当我们调用EXE时会弹出购买许可证的窗口。 - PravyNandas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接