【问题标题】:Opening a Web URL with a TCL App that is Sitting on a Network Drive使用位于网络驱动器上的 TCL 应用程序打开 Web URL
【发布时间】:2011-02-01 09:02:32
【问题描述】:

我刚刚完成了一个 TCL Db 应用程序,其中包括打开网页 URL 的功能。我的代码如下($adr是url):

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

此代码在我的 Windows 工作站上运行良好。但是,在我将应用程序放在网络驱动器上后,我收到以下错误:

'\驱动器\共享\文件夹\子文件夹' CMD.EXE 以上述路径作为当前目录启动。 不支持 UNC 路径。默认为 Windows 目录。

网页仍然打开,但我仍然收到 TCl 错误。

soemone 是否知道在服务器或网络环境中使用 TCL 打开 URL 的更好方法?

谢谢,

DFM

【问题讨论】:

  • 我将代码更改为以下内容:catch {eval exec [auto_execok start] \"\" [list $adr]} 这似乎在打开网页时消除了错误。跨度>

标签: windows url tcl


【解决方案1】:

当 Tcl 尝试执行您指定的 URL 时,显示的消息实际上是由 Windows 命令解释器 CMD.EXE 生成的。当它使用设置为网络路径的当前工作目录启动时,它会向 stderr 生成警告消息。

您可以尝试的另外两件事:

  1. 使用 -ignorestderr 运行 exec。这将导致此特定警告消息(以及写入 stderr 的任何其他消息/错误不会在 Tcl 中产生错误)。当你用 catch 包装你的代码时,你基本上忽略了这个和任何其他错误,这可能并不理想。 eval exec -ignorestderr [auto_execok start] \"\" [list $adr]
  2. 将您的工作目录设置为执行之前的另一个路径,这是 CMD.EXE 在打印出该警告后所做的: cd $::env(TEMP) eval exec [auto_execok start] \"\" [list $adr]

当然,请小心运行来自不受信任输入的任意命令和参数,否则有人可能会将您的应用程序用作运行恶意命令的后门。

【讨论】:

  • +1,请记住最后一部分:否则它可能会导致严重的安全问题。
猜你喜欢
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
相关资源
最近更新 更多