Как провести конвертирование VBScript в исполняемый файл (EXE)? [закрытый]
Я искал информацию для преобразования VBScript (*.vbs)
исполняемому файлу и понял, что большинство доступных инструментов фактически обертывают скрипт в исполняемый файл. Попробовал несколько инструментов, и это сработало не так хорошо, как ожидалось. Я попытался IExpress (в Windows XP) создать файл Win32 self extraction cab, но он не вызывался должным образом на машинах Windows 7.
поэтому я ищу способ скомпилировать vbs в exe. Я пытаюсь перенести мой текущий скрипт в VB Express 2008, но у меня нет предварительных знаний о Visual Basic здесь. Есть много ошибок, но я все еще пытаюсь.
может ли кто-нибудь посоветовать, как мне действовать отсюда? Я имею в виду, будет самораспаковывающийся архив быть способ пойти вместо исполняемый файл? Но, скажем, как Winzip, я не знаю, как заставить его запустить скрипт после извлечения.
какие идеи?
6 ответов
нет способа преобразовать VBScript (.файл VBS) в исполняемый файл (.exe-файл), потому что VBScript не компилируемый язык. процесс преобразования исходного кода в машинный исполняемый код называется "компиляция", и это не поддерживается сценарии языки, такие как VBScript.
конечно, вы можете добавить свой скрипт в самораспаковывающийся архив, используя что-то вроде WinZip, но все, что будет делать, это сжимать его. Сомнительно, что размер файла заметно уменьшится, и поскольку это простой текстовый файл для начала, на самом деле нет необходимости сжимать его вообще. Единственная цель a самораспаковывающийся архив программного обеспечения декомпрессии (например, 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 программы также будут компилироваться в an .exe-файл, но они требуют, чтобы среда выполнения .NET Framework была установлена на компьютере пользователя. К счастью, это также стало обычным явлением, и его можно легко распространять, если у ваших пользователей его нет. Ты упоминал это маршрут в вашем вопросе (перенос текущего скрипта в VB Express 2008, который использует VB.NET), но что вы получаете много ошибок. Это то, что я имею в виду, о том, что это далеко от миграции вырезания и вставки. Есть некоторые огромный различия между VB 6/VBScript и VB.NET несмотря на некоторые поверхностные синтаксические сходства. Если вам нужна помощь в переносе по вашему VBScript, вы можете опубликовать вопрос здесь о переполнении стека. В конечном счете, это, вероятно, лучший способ сделать то, что вы хочу, но не могу обещать, что все будет просто.
вы можете использовать программное обеспечение VBSedit для преобразования кода VBS .файл EXE. Вы можете скачать бесплатную версию из интернета и installtion vbsedit applilcation на вашей системе и конвертировать файлы в формат exe.
Vbsedit-хорошее приложение для vbscripter's
Подробнее
чтобы найти компилятор, у вас будет 1 на версию .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
С помощью этих дополнительных параметров дает вам значок и манифест. Манифест позволяет указать run as normal, run elevated if admin, только run elevated.
/ win32icon: указывает файл значков Win32 (.ico) для ресурсов Win32 по умолчанию.
/ win32manifest: предоставленный файл встроен в раздел манифеста выходного PE.
теоретически, у меня есть UAC, поэтому не могу проверить, но положил это текстовый файл на рабочем столе и назовите его vbs2exe.манифест, сохранить как 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
открыть vbs2exe.res файл в ResHacker. Редактировать прочь. Нажмите кнопку Compile. Выберите меню Файл - Спасать.
тип
"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"
вот несколько возможных решений...
Я еще не пробовал все это сам, но скоро я буду пробовать их все.
Примечание: у меня нет никакой личной или финансовой связи с любым из этих инструментов.
1) конвертер VB Script в EXE (не компилятор): (бесплатно)
vbs2exe.com.
исполняемый файл, похоже, является истинным EXE.
с их сайта:
VBS to EXE это бесплатный онлайн конвертер, который не только конвертирует ваши файлы vbs в exe, но и:
1 - зашифруйте исходный код файла vbs с помощью 128-битного ключа.
2-позволяет вызывать win32 API
3-Если у вас есть проблемы с windows vista, особенно когда UAC включен, вы можете дать VBS EXE попробовать.
4 - нет необходимости в wscript.exe для запуска vbs больше.
5 - ваш скрипт не сохраняется на жесткий диск, как некоторые другие конвертеры. это настоящий exe, а не экстрактор.
Это решение должно работать, даже если wscript/cscript не установлен на компьютере.
в основном, это создает true .файл EXE. Внутри созданного .EXE-это "движок", который заменяет wscript/cscript и зашифрованную копию кода сценария VB. Этот механизм замены выполняет ваш код в памяти без вызова wscript / cscript для этого.
2) компиляция и преобразование VBS в ИСПОЛНЯЕМЫЙ...:
ExeScript
текущая версия 3.5.
Это не бесплатное решение. У них 15-дневная пробная версия. После этого вам нужно купить лицензию на здоровенный $44.96 (домашняя лицензия/некоммерческая) или $89.95 (бизнес-Лицензия/коммерческое использование).
похоже, что он работает аналогично предыдущему решению.
согласно сообщению форума там:
Сообщение:"Exe-файл по-прежнему нужен Windows Scripting Host (Из WSH) ??"
WSH не требуется, если использовался параметр "Compile", так как ExeScript
реализует собственный скриптовый хост. ...
3) зашифруйте скрипт с помощью Microsoft ".vbs to .инструмент ВБЕ" шифрования.
по-видимому, это не работает для Windows 7/8, и, возможно, есть способы "расшифровать".файл vbe. На момент написания этой статьи я не мог найти рабочую ссылку для загрузки этого. Если я найду одна, я добавлю его к этому ответу.
вы можете попробовать VbsEdit. Скачайте последнюю версию по Adersoft VbsEdit http://www.vbsedit.com его небольшой загрузки, но это мощный инструмент для создания и редактирования VBS-файл и преобразовать их в исполняемые файлы без распаковки временных папок. (если вы не получите старую версию, такую как версия 4.X. X. x) я использую эту программу с 2008 года, и она бесплатна для оценки навсегда, но поставляется с напоминанием об активации, и каждый раз, когда вы запускаете свой скрипт из окна vbsedit, вы придется подождать несколько секунд, или вы можете приобрести его за $60, чтобы удалить эти мелкие неприятности.
В Отличие От ScriptCryptor, преобразованный exe не будет иметь никаких ограничений, если вы все еще оцениваете, он будет работать без каких-либо нежелательных дополнительных окон.
вы можете сделать это с PureBasic и MsScriptControl
все, что вам нужно сделать, это вставить MsScriptControl в Редактор Purebasic и добавить что-то вроде этого ниже
InitScriptControl()
SCtr_AddCode("MsgBox 1")