我讨厌编写 UI,所以我选择使用这种较旧的技术,因为我有一个内置的图形 UI 设计器。
这就是我正在尝试做的事情:
Process.Start("file:///F:/Dashboard%20Files/Open%20Issues.htm");
当我无缝运行构建时,这是有效的,但由于某种原因,当我发布它时,我在事件查看器中收到此错误:
Exception message: The system cannot find the file specified
我确实在事件日志消息中看到了这一点,也许有人有一个妙语来解决这个问题:
Request URL: http://investments.com/A00-Home.aspx
Request path: /A00-Home.aspx
User host address: 10.XXX.XXX.XXX (local 10.* address)
User:
Is authenticated: False
我的想法是,我需要以某种方式将集成身份验证放入 web.config 文件中。是这个问题吗
尝试过这个:
Process.Start("file:///F:/Dashboard%20Files/Open%20Issues.htm");
得到这个:
Exception message: The system cannot find the file specified
我尝试将其添加到 Web.config 文件中,但仍然遇到相同的错误。
<authentication mode="Windows" />
所以,你有这个:
Process.Start("file:///F:/Dashboard%20Files/Open%20Issues.htm");
您不能使用以上内容。您可以启动一个进程,但不能启动具有任何 UI 输出的进程。以上实际上是一个命令行过程,并将在您的计算机上启动一个新程序。
就您而言,这是可行的,因为您的开发计算机也是 Web 服务器计算机。
上面的内容与执行这段代码并没有太大的不同:
标记:
<asp:Button ID="Button1" runat="server" Text="test message"
OnClick="Button1_Click"
/>
背后代码:
using System.Windows.Forms;
代码存根:
protected void Button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
现在的结果是这样的:
这“看起来”与上面的工作原理类似,但是该消息框出现在 Web 服务器计算机上,而该计算机也恰好是运行 Web 服务器、浏览器和后台代码的同一台计算机。因此消息框正在显示,但不是通过浏览器显示。
如果将上述内容发布到网络服务器,那么最终结果将是这样的:
因此,您的消息框将会显示,但当然会显示在网络服务器上!
当您使用 process.start 启动一个全新的单独进程时,也存在同样的问题。
process.start 将启动 Excel、Word 或其他任何程序,但会在服务器上启动该程序,因此该进程的输出当然会出现在位于某个服务器机房的 Web 服务器上。
今天晚些时候我将尝试发布一些其他可能的解决方案,但上面至少解释了为什么尝试在运行 Web 服务器的计算机上退出或启动新进程将不起作用,因为启动这样的进程意味着一个单独的进程Windows 程序,任何输出都不会通过 Web 服务器发送,而是在托管 Web 服务器的计算机上运行。
因此,您当然不能使用 process.start 在我的计算机上运行软件,因为如果当我访问您的网站时您可以在我的台式计算机上运行软件,那么出于安全原因当然没有人会访问您的网站,更糟糕的是,由于安全风险,没有人会使用互联网。