Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将AppJS项目制作成单个exe_Javascript_Node.js_Exe_Executable_Appjs - Fatal编程技术网

Javascript 将AppJS项目制作成单个exe

Javascript 将AppJS项目制作成单个exe,javascript,node.js,exe,executable,appjs,Javascript,Node.js,Exe,Executable,Appjs,我已经在网上阅读了好几天了,我无法找到一个解决这个问题的办法,我可以开始工作了 我想一个单一的exe文件,解压到临时位置时,你运行的文件,可以共享和发送给人。理想情况下,我希望隐藏我的JavaScript文件 我只需要一个文件,可以很容易地发送 -法萨尼我不知道有什么简单的方法可以做到这一点 但是不久前我遇到了一个类似的问题,我创建了一个VB.Net程序来帮我完成这个任务 首先在此处下载节点的便携式32位版本: 如果已安装visual studio,请创建新项目,然后从解决方案资源管理器转到项目

我已经在网上阅读了好几天了,我无法找到一个解决这个问题的办法,我可以开始工作了

我想一个单一的exe文件,解压到临时位置时,你运行的文件,可以共享和发送给人。理想情况下,我希望隐藏我的JavaScript文件

我只需要一个文件,可以很容易地发送


-法萨尼

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

但是不久前我遇到了一个类似的问题,我创建了一个VB.Net程序来帮我完成这个任务

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

如果已安装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”的文件资源),然后在同一文件夹中提取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 framework,而不是所有用户都有

如果希望cmd打开并显示节点输出,请在将CreateNowInow设置为true的行中添加注释

-----不是答案的一部分,但如果您希望有一个UI,并在其中放置一个关闭按钮,以便用户不必从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更熟悉其他语言,你也可以在其他语言中做类似的事情