使用位于网络驱动器上的 TCL 应用程序打开 Web URL

发布于 2024-08-12 04:24:54 字数 372 浏览 2 评论 0原文

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

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

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

“\Drive\Share\Folder\Subfolder” CMD.EXE 以上述路径作为当前目录启动。 不支持 UNC 路径。默认为 Windows 目录。

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

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

谢谢你,

东风公司

I just finished a TCL Db App that includes a featrue to open web page URLs. My code is as follows ($adr is the url):

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

This code works fine on my Windows workstation. However, after I placed the app on a network drive I receive the following error:

'\Drive\Share\Folder\Subfolder'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.

The web page still opens, but I still get the TCl error.

Does soemone know a better way to open URLs with TCL in a server or network environment?

Thank you,

DFM

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恏ㄋ傷疤忘ㄋ疼 2024-08-19 04:24:54

当 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]

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

The message displayed is actually being generated by CMD.EXE, the Windows command interpreter, when Tcl tries to execute the URL that you specify. It generates that warning message to stderr when it is started with a current working directory that is set to a network path.

Two other things you could have tried:

  1. run exec with -ignorestderr. This will cause this particular warning message (and any other messages/errors written to stderr to not produce an error in Tcl). When you wrap your code with catch, you are basically ignoring this and any other errors, which may not be ideal.
     eval exec -ignorestderr [auto_execok start] \"\" [list $adr]
    
  2. set your working directory to another path prior to the exec, which is what CMD.EXE is doing after it prints out that warning:
     cd $::env(TEMP)
     eval exec [auto_execok start] \"\" [list $adr]
    

Of course, be careful about running arbitrary commands and arguments that come from untrusted inputs, or someone might use your application as a backdoor to run malicious commands.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文