Нужна помощь с оберткой Tclapp

Я делаю этот GUI-скрипт TCL с помощью ActiveTCL и Expect.

Но по какой-то причине Expect не работает с telnet, который поставляется с 64-разрядной версией Windows 8, поэтому я придумал способ использовать собственный сценарий tcl для telnet. Он работает нормально, но теперь мне нужно обернуть мой сценарий со сценарием telnet и некоторыми изображениями логотипа в один .exe для запуска без дополнительных файлов в каталоге, но я не могу заставить его работать.

Я нажимаю добавить файлы в оболочку tclapp, но он говорит, что файл не найден в сценарии, когда он пытается вызвать сценарий telnet.


person Nikaido    schedule 08.11.2013    source источник
comment
Системный telnet в Windows помечен как системный двоичный файл (специальный флаг файловой системы), что делает невозможным присоединение к нему механизма отладки, как работает Expect-on-Windows. Просто так, как вы знаете.   -  person Donal Fellows    schedule 09.11.2013
comment
Вы пытаетесь запустить свой telnet-скрипт как собственный завернутый исполняемый файл?   -  person Donal Fellows    schedule 09.11.2013


Ответы (1)


Когда вы заключаете код Tcl в исполняемый файл, состоящий из одного файла, все идет внутри. Скрипты, библиотеки, любые изображения (при условии, что вы делаете графический интерфейс), многое. 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 скопировать копию после того, как закончите ее использовать.

Соответствующий справочный материал:

person Donal Fellows    schedule 10.11.2013
comment
Я думаю, что мы не поняли друг друга, мой телнет - это скрипт, а не исполняемый файл. Я мог бы попытаться найти telnet winxp для использования с ним, так как он хорошо работает с активным TCL, но я не могу заставить его работать с 64-битным клиентом telnet w8. - person Nikaido; 11.11.2013