Каков наилучший способ открыть файл со связанным приложением из 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"
Другие вопросы по тегам