好的,在发表评论后添加澄清,事实上我意识到我原来的问题非常困惑。这就是我要实现的目标......
这将是一个在本地 Intranet 上而不是在 Internet 上运行的 Web 应用程序。最后,我想从 Web 应用程序中打开一个网络文件夹位置。因此,例如,Web 应用程序在文件服务器上创建具有一组结构的文件夹,即:
\server\jobnumber\exhibitreference\image1 \server\jobnumber\exhibitreference\image2
我希望用户能够导航到记录并单击链接以打开其匹配的文件夹位置。用户、网络服务器和文件服务器都在同一个域中。
下面的代码只是作为一个示例,在我开始尝试远程文件夹之前,尝试让它在我的本地机器上为文件/文件夹工作。我很欣赏这令人困惑。
原始问题
我已经创建了 .Net/C# 网络应用程序,我想在指定位置打开一个文本文件。下面的代码在 IIS Express 上运行时运行良好,但一旦发布到 IIS,它就无法运行。
目前 IIS Express 和 IIS 7 正在我的本地计算机上运行。 IIS 应用程序池配置为在我的域帐户下运行(必须这样做,因为我们有一个到 SQL 服务器的双跳身份验证问题)到目前为止,我有以下代码:
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.WorkingDirectory = @"C:\Users\pcustance\Desktop\";
processStartInfo.FileName = @"notepad.exe";
processStartInfo.Arguments = "test.txt";
processStartInfo.WindowStyle = ProcessWindowStyle.Maximized;
processStartInfo.CreateNoWindow = true;
Process process = Process.Start(processStartInfo);
通过任务管理器查看系统进程,我可以看到进程“notepad.exe”已成功创建,但没有窗口打开。它说该进程正在“pcustance”帐户下运行,但我只能在任务管理器中选择“显示所有用户的进程”时才能看到它。
窗口未启动是因为它以某种方式在错误的帐户下运行吗?
我也试过:
Process.Start("C:\Users\pcustance\Desktop\test.txt");
和以前一样,这在 IIS Express 中有效,但在 IIS7 中无效。
非常感谢任何帮助。
解决方案
目前我不得不求助于 Internet Explorer,它支持开箱即用的本地链接。浏览器可以指向具有以下内容的网络位置:
file:///\\server\folder\location
or
file://///server/folder/location
最佳答案
您的所有代码都在托管在服务器(通过 IIS)中的 asp.net 中运行。
您编写的代码将在托管您的 asp.net 应用程序的上下文中执行。
在使用 Visual Studio 进行 Web 开发时,“服务器”和“客户端”(即浏览器)通常是同一台计算机。代码在本地化 开发服务器的上下文中执行。您的浏览器将向“那个”服务器发出请求。因此,您编写的代码势必会给您一种错觉,即您已经启动了该过程 - notepad.exe
您实际实现的内容一般不适用于 Web 应用程序。这甚至是不可行的。由于“服务器”和“客户端”现在是两台不同的机器。最接近实现此要求的方法是提供文件作为响应。对于最终用户,这等同于下载(在大多数情况下)。
编辑:
您的选项按代码所示提供文件:
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", _
"attachment; filename=""" & filename & """");
这将强制用户使用 filename
中的值指定的默认名称将文件下载到客户端。实际上,您可以改变 Content-Disposition 部分来指示浏览器如何加载。但是,这取决于目标浏览器。这是一个小例子:
FileStream MyFileStream = new FileStream(@"d:\inetpub\wwwroot\small.txt", FileMode.Open);
long FileSize;
FileSize = MyFileStream.Length;
byte[] Buffer = new byte[(int)FileSize];
MyFileStream.Read(Buffer, 0, (int)MyFileStream.Length);
MyFileStream.Close();
Response.ContentType="text/plain";
Response.AddHeader( "content-disposition","inline; filename=sample.txt");
Response.BinaryWrite(Buffer);
您应该研究一些文章并进行实验。以下是一些链接:
关于c# - 从 asp.net web 应用程序打开本地系统上的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354978/