У меня есть tcl-скрипт с именем main.tcl
в папке с именем App
. Одна из строк в скрипте использует команду из twapi module (эта строка фактически находится в proc, и я пытаюсь свести к минимуму приложение в системный трей, когда пользователь закрывает приложение через кнопку окна «X»):Загрузка значка из набора с помощью twapi
package require twapi
# ... code here
set hand [twapi::load_icon_from_file tclkit.ico]
# ... code here
Файл tclkit.ico
находится в том же каталоге, что и скрипт (то есть в папке App
).
Когда main.tcl
проходит через wish
, скрипт работает без каких-либо проблем, но после того, обернув его в исполняемый файл с помощью командной строки,
> tclkit sdx.kit wrap App -runtime tclsh863.exe
исполняемый файл вызывает ошибку, в частности, что файл значок не может быть найдено:
The system cannot find the file specified.
The system cannot find the file specified.
while executing
"LoadImage $hmod $path $type $opts(width) $opts(height) $flags"
(procedure "twapi::_load_image" line 18)
invoked from within
"twapi::load_icon_from_file tclkit.ico"
(procedure "min_to_tray" line 2)
invoked from within
"min_to_tray"
(command for "WM_DELETE_WINDOW" window manager protocol)
в настоящее время обходной путь прямо сейчас, чтобы иметь копию tclkit.ico
файла в том же каталоге, что и .exe, но я хочу, чтобы избежать этого как можно больше, и только стенд файл .exe. Я попытался с помощью полного пути с:
set hand [twapi::load_icon_from_file [file join [pwd] App.exe tclkit.ico]]
, который обычно работает, когда я хочу, чтобы прочитать файл (.txt, .png файлы и т.д.) в пределах .exe, без успеха.
В основном, есть ли способ, позволяющий .exe загружать файл .ico из самого себя или в другое обходное решение, которое не требует какой-либо зависимости от файла вне приложения .exe?
Я * думаю * базовый Windows API принимает имя файла, поэтому вам нужно скопировать файл. Вы можете скопировать во временный файл и указать это имя. (Так работает 'load' в Windows ...) –
@DonalFellows Спасибо, я не думал о создании временного файла. Я сделал «копию файла», чтобы скопировать значок из exe в текущий каталог (затем удалить его, как только это уже не понадобилось), и это работает как шарм. Я бы принял решение в качестве ответа :) – Jerry