19

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

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

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

有任何想法吗?

4

6 回答 6

21

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

当然,您可以使用 WinZip 之类的工具将您的脚本添加到自解压存档中,但您只需将其压缩即可。文件大小是否会明显缩小是值得怀疑的,而且由于它是一个纯文本文件,所以根本不需要压缩它。自解压存档的唯一目的是最终用户的计算机上不需要解压软件(如 WinZip)来解压或“解压”文件。如果它一开始没有被压缩,这是一个有争议的问题。

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

为了真正将您的 VBScript 转换为可执行文件,您将不得不用另一种可以编译的语言重写它。 Visual Basic 6(VB 的最新版本,在引入 .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 上发布问题。最终,这可能是做你想做的最好的方式,但我不能向你保证它会很简单。

于 2010-12-13T07:07:44.487 回答
17

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

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

于 2011-12-05T18:40:37.120 回答
3

更多信息

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

 

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"
于 2013-10-06T22:05:57.113 回答
3

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

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

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

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

生成的 exe 似乎是真正的 EXE。

从他们的网站:

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

1- 使用 128 位密钥加密您的 vbs 文件源代码。
2-允许您调用win32 API
3-如果您在使用windows vista时遇到问题,尤其是在启用UAC时,您可以试试VBS到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 美元(营业执照/商业用途)的价格购买许可证。

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

根据那里的论坛帖子:
帖子:“一个Exe文件仍然需要Windows脚本主机(WSH)??

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


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

显然,这不适用于 Windows 7/8,并且可能有一些方法可以“解密” .vbe 文件。在写这篇文章的时候,我找不到下载这个的工作链接。如果我找到一个,我会把它添加到这个答案中。

于 2012-12-21T06:56:32.637 回答
0

您可以使用 PureBasic 和MsScriptControl做到这一点

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

InitScriptControl()
SCtr_AddCode("MsgBox 1")
于 2015-04-14T08:45:03.740 回答
0

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

于 2016-04-20T05:05:34.197 回答