该网站在本地工作,但在服务器上却没有。
我正在使用免费托管somee.com
网站链接:http://multiple-search.somee.com/
此网站从文本框中获取搜索查询,并在google,yahoo等中搜索。 输入searchqueries并按下按钮时收到错误消息。错误是:
[Win32Exception (0x80004005): Access is denied]
System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) +614
System.Diagnostics.Process.Start() +56
System.Diagnostics.Process.Start(ProcessStartInfo startInfo) +49
System.Diagnostics.Process.Start(String fileName) +31
_Default.Button1_Click(Object sender, EventArgs e) +159
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
如何消除此错误?我的代码是:
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
// Getting Text from textbox
string input = TextBox1.Text;
//Parsing criteria: New Line
string[] lines = input.Split('\n');
foreach (string ln in lines)
{
if (CheckBox1.Checked == true)
{
System.Diagnostics.Process.Start("https://www.google.com/#q=" + ln.Substring(0));
}
if (CheckBox2.Checked==true)
{
System.Diagnostics.Process.Start("http://search.yahoo.com/search;_ylt=AmGbBTVg4RHlgJHNOZ4AaA2bvZx4?p=" + ln.Substring(0) + "&toggle=1&cop=mss&ei=UTF-8&fr=yfp-t-900");
}
if (CheckBox3.Checked == true)
{
System.Diagnostics.Process.Start("http://www.bing.com/search?q=" + ln.Substring(0) + "&go=&qs=n&form=QBLH&pq=chris+brown&sc=8-11&sp=-1&sk=");
}
if (CheckBox4.Checked == true)
{
System.Diagnostics.Process.Start("http://www.ask.com/web?q=" + ln.Substring(0) + "&search=&qsrc=0&o=0&l=dir");
}
if (CheckBox5.Checked == true)
{
System.Diagnostics.Process.Start("http://search.aol.com/aol/search?s_chn=prt_ct9&enabled_terms=&s_it=comsearch50ct17&q=" + ln.Substring(0));
}
}
}
}
答案 0 :(得分:2)
我怀疑您的托管限制正在阻止
System.Diagnostics.Process.Start
答案 1 :(得分:1)
错误描述为:[Win32Exception(0x80004005):访问被拒绝]
这是访问权限问题。要修复它,您可以授予IIS用户管理员权限。虽然这不是一个好的解决方案。
更好的解决方案是在有权运行可执行文件的用户下运行应用程序池,最好不是管理员级用户。
最好不要启动浏览器,而是使用每个搜索引擎API来获取搜索结果并相应地显示它们....看看this tutorial on how to use GOOGLE and BINGs API
答案 2 :(得分:1)
我同意Alex的观点,即您的主持人可能会限制启动新流程。大多数托管服务将拒绝允许访问本质上在其服务器上启动新应用程序的内容。
除此之外,您的代码无论如何都无法运行。即使他们允许启动新流程,客户也永远不会看到结果。这将在服务器上打开新的浏览器窗口,而不是在客户端计算机上打开。
答案 3 :(得分:0)
Process.Start()
在服务器上启动进程。只要Web应用程序在您的计算机上运行,这种方法就有效,但在托管环境中肯定受到限制。
答案 4 :(得分:0)
AppPool中IIS使用的用户帐户无权启动新进程。在本地运行时,该帐户可能是管理员或至少是用户级帐户。
答案 5 :(得分:0)
正如其他人所说,System.Diagnostics.Process
可能受到限制。尝试以不同的方式执行此操作,例如使用System.Net.Http.HttpClient
。
答案 6 :(得分:0)
不允许在服务器上运行进程。对于服务器端代码,请尝试此操作,尽管它只会打开一个窗口而不是所有搜索:
Server.Transfer("https://www.google.com/#q=" + ln); // for Google
要打开多个窗口/标签,我会查看客户端JavaScript代码。或者,您可以使用他们的API从Google / Bing等获取结果,并按@Paul Zahra的答案中所述合并它们。