将AppJS项目转换为单个exe

时间:2013-05-24 16:57:22

标签: javascript node.js exe executable appjs

我已经在网上阅读了几天,我无法找到解决方案,我可以开始工作。

我想要一个单独的exe文件在运行可以共享并发送给人的文件时解压缩到临时位置。理想情况下,我想隐藏我的JavaScript文件。

我只需要一个可以轻松发送的文件。

-Fasani

1 个答案:

答案 0 :(得分:0)

我不知道有什么简单的方法可以做到这一点

但我前一段时间遇到了类似的问题,我创建了一个VB.Net程序来为我做这个

首先在此处下载便携式32位版本的节点:Node.exe

如果安装了visual studio,则创建一个新项目,然后从解决方案资源管理器转到项目属性,并将node.exe和.js文件添加为资源。

然后在formload中(如果你不希望你的程序有一个ui)或在按钮点击事件中放置这些代码:

Try
    Dim tmpp = System.IO.Path.GetTempPath & "NodeTmp"
    If (Not System.IO.Directory.Exists(tmpp)) Then System.IO.Directory.CreateDirectory(tmpp)
    If Not System.IO.File.Exists(tmpp & "\tmp_node.exe") Then _
        My.Computer.FileSystem.WriteAllBytes(tmpp & "\node.exe", My.Resources.node, False)
    System.IO.File.WriteAllText(tmpp & "\jsfile.js", My.Resources.jsfile)
    System.IO.File.WriteAllText(tmpp & "\batfile.bat", """" & tmpp & "\tmp_node.exe"" """ & tmpp & "\jsfile.js""")
    Dim p As New Process()
    p.StartInfo.FileName = "cmd.exe"
    p.StartInfo.Arguments = "/C """ & tmpp & "\pz.bat"""
    p.StartInfo.CreateNoWindow = True
    p.StartInfo.UseShellExecute = False
    p.Start()
    'Timer1.start()
Catch ex As Exception
    MsgBox("Error")
End Try

上面的代码在C:\ user {name} \ appdata \ local \ Temp中创建一个名为NodeTmp的文件夹,并从该文件夹中提取node.exe(来自名为“node”的文件resorce)然后提取jsfile.js(从同一文件夹中名为“jsfile”的文件资源中创建一个.bat文件并运行它

删除.js文件后运行它(在不到1秒的时间内创建并删除它,因此它对用户来说是隐藏的): 创建一个名为Timer1的计时器,并将其间隔设置为150ms,并从上面的代码取消注释行Timer1.start()并将以下子项放在代码中的某处

Sub pz_cleanup() Handles Timer1.tick
    Try
        Dim tmpp = System.IO.Path.GetTempPath & "PZT"
        System.IO.File.Delete(tmpp & "\pz.bat")
        System.IO.File.Delete(tmpp & "\pz.js")
        Timer1.stop()
    Catch ex As Exception

    End Try
End Sub

这绝对不是最好的方法,但它对我有用,它对我来说唯一的缺点是它需要将.net框架安装在其他用户计算机上,并非所有用户都拥有它

如果您想要打开cmd并显示节点输出注释将CreateNoWindow设置为true的行

-----不是答案的一部分,但是如果你想拥有一个用户界面并在那里放一个关闭按钮,那么用户不必从taskmanager结束任务节点就可以使用这个代码:

Try
        Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("tmp_node")
        For Each p As Process In pProcess
            p.Kill()
            p.WaitForExit()
        Next
    Catch ex As Exception
        MsgBox("Error")
        Return True
    End Try

希望这会有所帮助,如果你对它们更熟悉,你可以在其他语言中做类似的事情然后VB.Net