0

Web ページの URL を開く機能を含む TCL Db アプリを完成させました。私のコードは次のとおりです ($adr は URL です)。

eval exec [auto_execok start] \"\" [list $adr]

このコードは、私の Windows ワークステーションで正常に動作します。ただし、アプリをネットワーク ドライブに配置すると、次のエラーが表示されます。

'\Drive\Share\Folder\Subfolder' CMD.EXE は、上記のパスをカレント ディレクトリとして起動されました。UNC パスはサポートされていません。デフォルトで Windows ディレクトリ。

Web ページは引き続き開きますが、TCL エラーが発生します。

soemone は、サーバーまたはネットワーク環境で TCL を使用して URL を開くより良い方法を知っていますか?

ありがとうございました、

DFM

4

1 に答える 1

3

表示されるメッセージは、指定した URL を Tcl が実行しようとしたときに、Windows コマンド インタープリターである CMD.EXE によって実際に生成されたものです。ネットワーク パスに設定された現在の作業ディレクトリで起動すると、その警告メッセージが stderr に生成されます。

あなたが試すことができた他の2つのこと:

  1. -ignorestderr を指定して exec を実行します。これにより、この特定の警告メッセージ (および stderr に書き込まれたその他のメッセージ/エラーが Tcl でエラーを生成しないようにする) が発生します。コードを catch でラップすると、基本的にこのエラーやその他のエラーを無視することになりますが、これは理想的ではない可能性があります。
    eval exec -ignorestderr [auto_execok start] \"\" [list $adr]
    
  2. exec の前に作業ディレクトリを別のパスに設定します。これは、その警告を出力した後に CMD.EXE が行っていることです。
    cd $::env(TEMP)
     eval exec [auto_execok start] \"\" [list $adr]
    

もちろん、信頼されていない入力からの任意のコマンドや引数の実行には注意してください。そうしないと、誰かがアプリケーションをバックドアとして使用して悪意のあるコマンドを実行する可能性があります。

于 2011-02-01T01:02:32.007 に答える