服务器端执行exe
我在web开发时候,遇到一个棘手的问题,希望在这里得到解决。
我的思路是想将一个计算软件集成在服务器里,用户提交数据,服务器端调用计算软件,最后返回结果到浏览器端。我写好了代码,在vs2010中运行没问题,在iis中布置不报错,就是不调用计算软件。代码如下:
Process proc = new Process();
string filename = Server.MapPath("App_Data\\cmd.exe");
proc.StartInfo.FileName = filename;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//隐藏窗口,后台运行
proc.EnableRaisingEvents = true;//在进程终止时,激发 Exited 事件。
proc.Exited += new EventHandler(proc_Exited);//在进程退出时发生,用于跳转下一个页面
proc.Start();
proc.StandardInput.WriteLine("cd E:");
proc.StandardInput.WriteLine("cd E:\\iFlora_protectedplants\\BLAST");
string inputpath = Server.MapPath("App_Data\\input.txt");
string outputpath = Server.MapPath("App_Data\\output.xml");
proc.StandardInput.WriteLine("blastn -query " + inputpath + " -db protected_plants -out " + outputpath + " -outfmt 5");
proc.StandardInput.WriteLine("exit");
string stroutput = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
proc.Close();
proc.Dispose();
网上很多人都说是iis权限的问题,大部分我都试过了,都不行。而且有些人说即使实现了,这种方式也很危险。在这里提问,我希望知道,怎么才能使这段代码执行。有没有更好的方法实现服务器端执行exe。希望得到详细一些的解答。先感谢大家! --------------------编程问答-------------------- 将代码放到Console程序Self-Host的WCF,然后服务端访问WCF得到结果
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/ --------------------编程问答-------------------- 不放在app_data目录就行了。 --------------------编程问答-------------------- 网站的的运行账号是network service或者iis_iuser defaultapppool之类,权限略低,exe之类不一定能执行的起来,一般没这么办事的,要网站程序调用本机exe取结果一般都是通过socket来联系。 --------------------编程问答-------------------- 应该可以的,我知道有人调用ffmpeg.exe处理视频:
http://www.codeproject.com/Articles/22070/Converting-extracting-preview-image-in-asp-net-via
cmd是系统命令,不用放到app data中,直接调用就可以了。 --------------------编程问答-------------------- 一般不是这种方式调用吗?
System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
proc.FileName = @"C:\windows\system32\cmd.exe";
proc.Arguments = @"/c ping 192.168.20.98";
System.Diagnostics.Process.Start(proc);
补充:.NET技术 , C#