对于我的一个项目,我需要将。net页面与对MATLAB进程的外部调用集成在一起。为了做到这一点(并且不花任何钱这样做),我创建了一个批处理文件,由. net页面本身调用。. NET MVC 3,如果有关系的话),它基本上包含一行——启动MATLAB并运行这个过程。
过程本身的结束将信息吐出到文本文件中,然后关闭MATLAB。当. net页面看到该文件已创建时,它将获取该文件并根据该文件中的数据进行一些计算。这个过程一直在我的本地机器上完美地工作,当我从VS 2012(在调试模式下)在服务器上运行它时。
有趣的部分来自于部署这个站点。我已经成功地将我的网站部署到互联网上,并且它上的一切都运行良好,除了用于此过程。它似乎根本没有运行。包含此批处理文件的目录具有附加到它的所有必要权限(IUSR和IIS_IUSRS),但似乎根本没有运行。
有没有人能告诉我如何让这个批处理文件在IIS 7.5上托管的网页中正常运行?是的,我知道这不是安全方面最好的主意,但我只是需要完成这件事。
编辑:下面是调用进程的代码:var matlabProcess = new Process {
StartInfo = {
FileName = "C:\Program Files\MATLAB\R2012a\bin\WebCall.bat",
Arguments = string.Format("{0} {1}", seeds, weights)
}
};
matlabProcess.Start();
批处理文件包含以下内容:
cd
cd progra~1MATLABr2012abin
start matlab -nosplash -nodesktop -minimize -r WebCall(%1,%2)
编辑:我的一个朋友建议,这是失败的原因是因为IIS上没有处理程序的批处理文件,因此IIS不知道如何甚至运行该文件。如果是这样,有人可以然后请告诉我如何创建一个适当的处理程序映射,以便我可以看到他的解决方案是否正确?
谢谢。
64位OS?如果是这样,也许您正在进行一些重定向。如果它是一个32位的应用程序,你应该指定%ProgramFiles(x86)%。最好检查并使用合适的一个,以便它可以在32位或64位上工作。
您是否从UNC位置执行(需要考虑在一些较新的操作系统上,可能不可能在win8和2012服务器上)?
将以下语句作为bat文件中的第一条语句:
echo.CD=%cd% & pause