我正在使用ActiveTCL&amp ;;制作这个GUI的TCL脚本。期望的。
但由于某些原因,Expect不能与Windows 8 64bit附带的telnet一起使用,所以我想办法使用自定义的telnet tcl脚本。它工作正常,但我现在需要用telnet脚本和一些徽标图像将我的脚本包装到单个.exe中,以便在目录中没有额外文件的情况下运行,但我不能让我的生活让它工作。
我单击将文件添加到tclapp包装器,但是当它尝试调用telnet脚本时,它表示脚本上找不到文件。
答案 0 :(得分:0)
当您将Tcl代码包装到单个文件可执行文件中时,一切都进入了。脚本,库,任何图像(假设您正在制作GUI),该批次。 Tcl透明地提取事物并假装你有一个真正的文件系统。但是,当您执行程序时(无论是通过exec
,open |…
还是spawn
),当您创建子进程时,操作系统必须 - 操作系统总是参与其中,因为进程管理是操作系统内核的主要功能之一 - 它需要有一个真正的可执行文件才能运行。如果将telnet替换打包为自己的单文件可执行文件并将其存储在父进程的VFS中,则必须使该从属进程可执行。
将telnet可执行文件复制到某个位置(例如,到我认为应该在$::env(TEMP)
中描述的临时目录)并执行它。
set realTelnetExe [file join $::env(TEMP) mytelnet.exe]
file copy .../the/stored/copy/mytelnet.exe $realTelnetExe
spawn $realTelnetExe
# ...
完成后,您可能希望file delete
副本。
相关背景材料: