Я столкнулся с неприятной проблемой прямо сейчас с exec. Все, что я пытаюсь сделать, это выполнить tcl-файл из программы, которую я обернул с помощью TclApp, и я продолжаю получать ошибку «нет такого файла или каталога».
Я нашел эту информацию здесь: https://community.activestate.com/faq/correctly-using-source-an и следовал ему до точки, но безрезультатно. Вот некоторый демонстрационный код:
Основной файл: я назвал обернутую версию TestClient.exe
package require Tk;
proc main {} {
set ::base [file dirname [info script]];
set file_to_exec [file join $::base "test.tcl"];
exec $file_to_exec;
}
main
test.tcl:
tk_messageBox -type ok -message "It Works!";
Этот код всегда будет выдавать ошибку:
couldn't execute "C:\Dev\TestClient.exe\lib\application\test": no such file or directory
Но код отлично работает, если я попробую source $file_to_exec; или любой другой вариант доступа к файлу, такой как использование команды open для чтения или записи из файла. TclApp специально не может найти файл, если я хочу его exec. Любая причина для этого? И как я могу заставить это работать? Программа, которую я написал, довольно большая и основана на возможности запускать некоторые tcl-файлы, которые работают без упаковки. Но теперь я собираюсь завернуть его и столкнуться с этой проблемой;
Заранее спасибо!
****ОБНОВИТЬ****
exec будет работать, если я отдельно оберну другие файлы tcl в TclApp. Например, если я оберну test.tcl и сделаю его Test.exe, я смогу запустить TestClient.exe и exec Test.exe... это может быть решением моей проблемы. Но это все еще своеобразная проблема.