【问题标题】:Permission denied error while executing shell command from JavaScript从 JavaScript 执行 shell 命令时权限被拒绝错误
【发布时间】:2012-06-07 17:48:49
【问题描述】:

我正在尝试运行 shell 命令以从 JavaScript 打开记事本。这就是我的代码的样子:

 <script type="text/javascript">
     function runNotepad() {
        var oShell = new ActiveXObject("Shell.Application");
        var commandtoRun = "C:\\WINDOWS\\Notepad.exe";
        oShell.ShellExecute(commandtoRun, null, "", "open", "1");
        }
 </script>

当我尝试运行它时,它会抛出一个错误,提示 Microsoft JScript runtime error: Permission denied。

我也在IE 中设置了Allow active content to run in files on my computer,但仍然没有运气。

知道我在这里缺少什么吗?

【问题讨论】:

  • 很好奇,预期的目的是什么?知道这一点可能会帮助读者提出合适的替代方案,除非您一心想要使用记事本。例如,也许您将拥有一项功能,为用户提供文本输入功能,该功能将保存到例如数据库中,然后作为可下载的 txt 文件提供给用户。
  • 好吧,记事本只是一个例子。我的实际要求是我从浏览器启动了一个处理付款信息的 Windows 应用程序。
  • 在我看来这不容易做到,但是您可以通过提供一个可下载的批处理文件来伪造它,该批处理文件在运行时可以打开应用程序。老实说,似乎比它的价值更麻烦。另一种选择是注册应用程序协议,就像打开 .pdf 文件通常会打开 acrobat 一样。更多关于协议的阅读:Registering an Application to a URL Protocol

标签: javascript asp.net internet-explorer internet-explorer-8 shellexecute


【解决方案1】:

知道我在这里缺少什么吗?

没有浏览器允许 JavaScript 任意启动进程。由于安全隐患,此功能在 Internet Explorer 中不可用。

如果从其他脚本主机(例如 cscript,但不是 Internet Explorer)运行,这将起作用。

【讨论】:

  • 还有其他方法可以在客户端系统上从 asp.net 启动 Windows 应用程序吗?
  • @Asdfg 你可以编写一个 ClickOnce 应用程序来启动 Notepad.exe。
【解决方案2】:

您不能在网页 javascript 中运行或创建本机对象。这个想法是,如果有人能做到这一点,那么他们就可以创建一个 FileSystem 对象。然后,当您无所事事地浏览他们的网页时,他们会对您的文件系统造成严重破坏。

如果您需要这样做,并将文件保存在主机的机器上,请将其保存为 HTML 应用程序 (*.hta)。

【讨论】:

    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2011-11-09
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多