我查看了将VBScript (*.vbs)
转换为可执行文件的信息,并意识到大多数可用工具实际上是将脚本包装在可执行文件中。尝试了一些工具,并没有达到预期的效果。我尝试使用IExpress(在Windows XP中)创建Win32自解压cab文件但在Windows 7计算机上没有正确调用。
所以我正在寻找一种将vbs编译成exe的方法。我正在尝试将当前脚本移植到VB Express 2008中,但我在此处没有Visual Basic的先验知识。有很多错误,但我仍在努力。
有人可以建议我如何从这里开始?我的意思是,自解压存档是否可以替代独立可执行文件?但是说像Winzip我不知道如何让它在提取后运行脚本。
有什么想法吗?
答案 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文件没有任何限制,它将在没有任何不需要的额外窗口的情况下运行。