javascript - 将 AppJS 项目制作成单个 exe

标签 javascript node.js exe executable appjs

我已经在线阅读了好几天了,但我找不到可以开始工作的解决方案。

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

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

-法萨尼

最佳答案

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

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

首先在这里下载可移植的 32 位 Node 版本:Node.exe

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

然后在表单加载中(如果您不希望您的程序有用户界面)或在按钮单击事件中放置这些代码:

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”的文件资源),然后提取 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 打开并显示 Node 输出,请注释将 CreateNoWindow 设置为 true 的行

----- 不是答案的一部分,但如果您想拥有一个 UI 并在那里放置一个关闭按钮,这样用户就不必从任务管理器中结束任务 Node ,请使用以下代码:

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 更熟悉其他语言,您也可以用其他语言做类似的事情

关于javascript - 将 AppJS 项目制作成单个 exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16740051/

相关文章:

javascript - 在 vue.js 路由加载之前检查权限

javascript - 将字符串转换为 Canvas 绘图的引用点

javascript - 单击时的 div 重定向到另一个 HTML 页面并调用 javascript 以显示特定的 div

javascript - NodeJS - 如何匹配一次?

.net - VB.NET Me.Close() 导致应用程序抛出 "has stopped working"消息

python - 使用wsgi脚本调用exe

javascript - 单击时返回数据表 tr 索引

node.js - MongooseError [MongooseServerSelectionError] : connection <monitor> to 52. 6.250.237:27017已关闭

javascript - 使用 MEAN angularjs Nodejs Stack 的 Phonegap 客户端

php - 在 PHP 中一段时间​​后删除文件