我正在使用下面的代码打开帮助文件asp.net
protected void lblHelp_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath(@"VersionControlHelp.chm");
Process.Start(filepath);
}
IIS
这在我的本地机器上运行良好,但在我发布到服务器时不起作用。有什么IIS
我应该修改的设置吗?
我正在使用下面的代码打开帮助文件asp.net
protected void lblHelp_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath(@"VersionControlHelp.chm");
Process.Start(filepath);
}
IIS
这在我的本地机器上运行良好,但在我发布到服务器时不起作用。有什么IIS
我应该修改的设置吗?
如果您Process.Start()
在 Web 服务器上调用,您将在 IIS 应用程序池用户的上下文中打开服务器上的 CHM 文件,该用户没有附加控制台(因此不会发生任何事情)。
我确定这不是你想要的。
我认为您正在尝试在客户端计算机上打开 CHM 文件。为此,请Response.Redirect("pathto/yourchmfile.chm")
从您的lblHelp_Click
方法中调用。这将导致浏览器下载 CHM 文件,然后用户可以选择打开它(视浏览器警告而定)或保存它。我认为这与您将得到的差不多。
(顺便说一下,它在本地工作,因为与 Visual Studio 捆绑在一起的 ASP.NET 开发服务器只是一个系统托盘应用程序,在用户登录时加载 - 所以如果这发出 a Process.Start()
,CHM 文件将在用户运行的上下文中打开Visual Studio,即您,附加到控制台会话,即您的屏幕。)
Process.Start 可能需要足够的权限才能运行。所以你需要检查你网站当前的应用程序池标识,这是否有足够的权限在服务器上启动一个进程?
如果这已经在本地工作,那么可能是因为权限或路径不正确。如果您以静默方式捕获异常,您可能看不到错误,例如 Access denied, Path not found
如果该文件位于您的 Web 应用程序的根目录中,您可以试试这个
protected void lblHelp_Click(object sender, EventArgs e)
{
string filepath = Server.MapPath("~/VersionControlHelp.chm");
Process.Start(filepath);
}
此外,@
不需要 is 符号,因为您没有使用反斜杠 ( \
) 或任何特殊字符