【问题标题】:How can I convert a VBScript to an executable (EXE) file? [closed]如何将 VBScript 转换为可执行 (EXE) 文件? [关闭]
【发布时间】:2010-12-13 03:52:16
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

标签: vbscript executable iexpress


【解决方案1】:

没有办法将 VBScript(.vbs 文件)转换为可执行文件(.exe 文件),因为 VBScript不是编译语言 转换过程将源代码转换为本机可执行代码称为"compilation",它不受 VBScript 等脚本 语言的支持。

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

另外,正如您所提到的,有一些方法可以将 VBScript 代码文件包装在独立的可执行文件中,但这些只是在用户双击 . exe文件。我想这可以有它的好处,但听起来不像你想要的。

为了真正将您的 VBScript 转换为可执行文件,您将不得不用另一种可以编译的语言重写它。 Visual Basic 6 (最新版本的 VB,在引入 .NET Framework 之前)在语法上与 VBScript 极为相似,但支持编译为本机代码。如果您将 VBScript 代码移至 VB 6,您可以将其编译为本机可执行文件。运行 .exe 文件将要求用户安装 VB 6 Run-time libraries,但它们已内置于现在广泛使用的大多数 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 Gray:您好,感谢您的回复。好吧,如果可能的话,我不介意使用 SFX 并启动脚本,但是对于我尝试过的大部分脚本都没有执行。最接近的是iexpress 生成的exe,但不知何故我不知道为什么它在某些Win7 机器上失败。我可能会听取您的建议,在这里发布我的 VBS 代码以获得迁移到 VB.NET 的帮助,因为我的机器上只有它。除非我专门找老版本的VB6来编译代码。
  • 答案被接受,成功移植到 VB.NET @Cody:知道在 VB.NET 中使用 getlocale() [in VB6] 的等效函数吗?这是我唯一不能迁移的东西。
  • @Alex:很高兴听到你的移植进展顺利。我会说 .NET Framework 中与 GetLocale 的最佳等价物(在 Google 上快速搜索以了解它到底做了什么!)是 CultureInfo.LCID property,在 System.Globalization namespace 中找到。即使这不是您正在寻找的内容,您也一定会在 System.Globalization 下的类中的某处找到等价物。
  • @Alex:我认为没有官方的 .NET 方法可以做到这一点,因为您正在使用 VBScript 的函数设计。正如您所发现的那样,这将起作用,如果这是一个简单的脚本,您可能希望就这样保留它。我不知道其他网站在提倡什么,但是以正确的 .NET 方式执行此操作可能取决于您使用 WScript.Shell 对象在做什么,而不是改变您的方式创建它。
  • +1 这是一个很好的答案!
【解决方案2】:

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

vbsedit是VBscripter的一个很好的应用

【讨论】:

  • 这里也是链接vbsedit.com
  • VBSedit 制作 exe 超级简单!
  • 很遗憾评估版只支持编辑器。 vbs 到 exe 可以工作,但是当我们调用 exe 时会弹出一个购买许可证的窗口。
【解决方案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 美元(营业执照/商业用途)的价格购买许可证。

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

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

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


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

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

【讨论】:

    【解决方案4】:

    更多信息

    要查找编译器,您需要为每个 .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"
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 很遗憾评估版只支持编辑器。 vbs 到 exe 可以工作,但是当我们调用 exe 时会弹出一个购买许可证的窗口。
      【解决方案6】:

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

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

      InitScriptControl()
      SCtr_AddCode("MsgBox 1")
      

      【讨论】:

        猜你喜欢
        • 2012-07-15
        • 1970-01-01
        • 2012-02-22
        • 2020-11-23
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        相关资源
        最近更新 更多