对于我的一个项目,我需要将.NET页面与外部调用MATLAB进程集成。为了做到这一点(并没有花费任何金钱),我创建了一个批处理文件,由.NET页面本身调用(ASP.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~1\MATLAB\r2012a\bin
start matlab -nosplash -nodesktop -minimize -r WebCall(%1,%2)
编辑:我的一位朋友建议,这是失败的原因是因为IIS上没有批处理文件的处理程序,因此IIS不知道如何运行该文件。如果有,那么有人可以告诉我如何创建一个合适的处理程序映射,以便我可以看到他的解决方案是否正确?
感谢。
答案 0 :(得分:0)
64位操作系统?如果是这样,也许你有一些重定向。如果它是32位应用程序,则应指定%ProgramFiles(x86)%。最好检查并使用适当的一个,使其适用于32位或64位。
您是从UNC位置执行的(需要考虑一些较新的操作系统,在Win 8和2012 Server上可能无法实现)?
将此作为bat文件中的第一个语句:
echo.CD=%cd% & pause