Каков наилучший способ открыть файл со связанным приложением из TCL?
У меня есть приложение TCL/TK на Windows. Каков наилучший способ открыть файл с соответствующей программой? Например, я создаю PDF-файл и хочу, чтобы он открывался автоматически.
Я использовал:
proc OpenDocument {filename} {
if {[catch {
exec rundll32.exe url.dll,FileProtocolHandler $filename &
}]} {
tk_messageBox -message "Error opening $filename."
}
}
Но я не уверен, насколько он надежен, и я хотел бы получить лучшее сообщение об ошибке. Например, как я могу определить, установлена ли какая-либо программа и связана ли она с PDF-файлами?
Я знаю, что многие программы (включая Foxit PDF Reader) добавляют запись реестра в разделе "HKEY_CLASSES_ROOT.extension", но Adobe Reader, похоже, использует другую систему.
Есть ли одна лучшая практика? Я собираюсь развернуть свою программу для нескольких сотен пользователей, и я хочу быть уверен, что не будет распространенных проблем, если у кого-то будет странная конфигурация.
Благодарю.
3 ответа
Я бы написал (для Tcl 8.5)
exec {*}[auto_execok start] "" $filename
(обсуждение здесь). Это может отображать окно cmd, хотя.
Если у вас есть более ранний Tcl,
eval exec [auto_execok start] {""} [list $filename]
Для записей: Используя TWAP расширение Tcl, можно также посмотреть на:
twapi::shell_execute -path $filename
Есть пример, чтобы увидеть, что ассоциация находится на странице справки реестра
package require registry
set ext .tcl
# Read the type name
set type [registry get HKEY_CLASSES_ROOT\\$ext {}]
# Work out where to look for the command
set path HKEY_CLASSES_ROOT\\$type\\Shell\\Open\\command
# Read the command!
set command [registry get $path {}]
puts "$ext opens with $command"