【问题标题】:ASP.NET Cannot launch Excel's file on serverASP.NET 无法在服务器上启动 Excel 文件
【发布时间】:2016-05-05 23:03:25
【问题描述】:

我正在尝试打开指定要打开的现有文件的启动 Excel。这是我的代码:

Protected Sub fileManager_SelectedFileOpened(source As Object, e As FileManagerFileOpenedEventArgs)

    Try
        Dim FullName As String = e.File.FullName
        System.Diagnostics.Process.Start(FullName)
        dvFileError.Visible = False
    Catch ex As Exception
        dvFileError.Visible = True
        lblFileError.Text = ex.Message
    End Try

End Sub

在 e.File.FullName 中,我可以找到文件名及其路径,因此当我将其作为进程启动时,它应该打开 Excel 文件。 所以这段代码在本地工作,但是当我把它上传到网络服务器上时它不起作用。它说“向应用程序发送命令时出错”

我创建了一个 .txt 文件来测试我的应用程序是否可以访问该文件夹,我认为这是 “访问被拒绝” 错误。

这很奇怪,因为如果我使用 DevExpress 的 ASPxSpreadSheet 控件打开同一个 Excel 文件,文件就会打开。

有什么解决办法吗?

【问题讨论】:

    标签: asp.net vb.net excel devexpress


    【解决方案1】:

    在我开始之前,我可以告诉你,这是你能做的最糟糕的事情之一 - 就是在 Web 服务器上运行 Excel 应用程序。

    如果您需要读取或保存 Excel 文件,请使用 Microsoft.Ace.OleDb.xx(xx 版本)。它将允许您像使用常规数据库一样使用 Excel。此外,如果在连接字符串中给出不存在的文件的文件名,它将创建它。

    记住,你在服务器上。您的应用程序在应用程序池中运行。应用程序池在某个用户帐户下运行,该帐户可能无权打开任何用户界面。

    我记得,我们遇到了 Windows 服务和 Excel 自动化问题。 Excel 需要该帐户,该帐户运行它才能真正登录到机器上。换句话说,您需要使用运行应用程序池的帐户的凭据才能登录到这台机器。只有这样 Excel 自动化才会起作用。

    无论如何。当您执行 Excel 自动化时,您需要做的第一件事是打开 Excel 一次,以摆脱它从一开始就显示的所有对话框。在您点击它们之前,每个实例都会继续显示它们,即使您没有看到它们或实例。

    最后几句话 - 您需要使用一些 interop 程序集,而不仅仅是 process.start。它会处理一些事情。但微软告诉我们——尽管承认,他们不支持或不推荐 Excel 自动化——这是可能的。回到第 2 段——写入或读取数据是这样做的,而不是你所做的。您可以在 IIS 进程中执行 #2。但是不要在过程中进行自动化 - 非常糟糕的主意。

    【讨论】:

      【解决方案2】:

      在正常情况下,您的 Web 服务不能只在客户端上打开可执行文件。有几个例外:

      1. 您的 Web 服务器对客户端具有管理员权限。这通常只发生在公司 LAN 场景中
      2. 您的 Web 服务与客户端是同一台机器。
      3. 您在客户端上运行了某种软件,可以根据需要启动程序。这需要浏览器的 Web HTML/CSS/JS 沙箱之外的技术。

      您在#2 下运行。但是,一旦您切换到无法正常工作的远程客户端。您不能使用System.Diagnostics.Process 在远程客户端上启动应用程序。而且您不能直接访问远程客户端计算机上的文件。您的 VB.NET 代码在服务器上运行,而不是在客户端上。只有您的 HTML/CSS/JS 在客户端上运行,并且位于浏览器的有限沙箱中。

      实现您想要的一般模式只是通过将文件写入 HTTP 响应来提供一个文件供用户下载。然后用户可以打开该文件,它将启动他们的默认程序来编辑该文件类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        相关资源
        最近更新 更多