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