2

私は何日もオンラインで読んでいますが、これに対する解決策を見つけることができません。

ファイルを実行すると一時的な場所に展開され、共有して他の人に送信できる 1 つの exe ファイルが必要です。理想的には、JavaScript ファイルを非表示にしたいと考えています。

簡単に送信できるファイルが 1 つだけ必要です。

-ファサニ

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」というファイル リソースから) node.exe を抽出してから、(ファイルから) 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フレームワークを他のユーザーのコンピューターにインストールする必要があることでした。

コマンドを開いてノード出力を表示する場合は、CreateNoWindow を true に設定する行にコメントを付けます。

----- 回答の一部ではありませんが、ユーザーがタスク マネージャーからタスク ノードを終了する必要がないように、UI を使用してそこに閉じるボタンを配置する場合は、次のコードを使用します。

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 に答える