2

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

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

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

-法萨尼

4

1 回答 1

0

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

但不久前我遇到了类似的问题,我创建了一个 VB.Net 程序来为我做这件事

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

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

然后在表单加载(如果您不希望您的程序有 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 框架,而并非所有人都拥有它。

如果您希望 cmd 打开并显示节点输出注释将 CreateNoWindow 设置为 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 更熟悉的话,您也可以用其他语言做类似的事情

于 2013-05-24T21:05:15.963 回答