对于我正在处理的模块,我收到了一个编译好的Matlab可执行文件(请注意它是一个独立的.exe,而不是.dll或者其他类似的东西),我必须执行它来执行一些分析工作我
工作流是创建输入文件(简单的.csv格式),执行.exe并解析由Matlab可执行文件生成的输出文件(.csv)。
我已经测试了输入文件生成和输出文件解析,如果我自己说的话,它们可以很好地工作。但是我在运行Matlab可执行文件时遇到了一些麻烦。我安装了正确的MCR,我可以双击可执行文件,它按预期运行。但是使用以下代码,可执行文件无法正确执行:
var analyzer = new Process
{
StartInfo =
{
FileName = Path.Combine(WorkDirectory, "analyzer.exe"),
CreateNoWindow = false,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false, RedirectStandardError = true, RedirectStandardOutput = true // These lines were added for debugging purposes
}
};
analyzer.Start();
punProcess.WaitForExit();
string debuginfo = punProcess.StandardOutput.ReadToEnd();
string debuginfo2 = punProcess.StandardError.ReadToEnd();
我从“debuginfo”中提取的文字如下:
{Warning: Name is nonexistent or not a directory: C:\MATLAB\R2009b\toolbox\pun.}
{> In path at 110
In addpath at 87
In startup at 1}
{Warning: Name is nonexistent or not a directory:
C:\MATLAB\R2009b\toolbox\pun\pun.}
{> In path at 110
In addpath at 87
In startup at 2}
我从“debuginfo2”中提取的文字是:
{Error using textscan
Invalid file identifier. Use fopen to generate a valid file identifier.
Error in readin (line 4)
Error in Analyzer (line 12)
}
MATLAB:FileIO:InvalidFid
这些问题是由于我的代码造成的吗?它们是否是由于通过C#使用它的背景?或者分析仪本身可能存在问题?我无法访问分析器可执行文件的来源,因此无法调试该部分。
发生的错误,可能是因为给出了警告并且我错过了某种类型的引用(对于MCR可能?),当我只是双击它(或者从cmd运行它时,它也是隐式可用的)像魅力一样工作??
工作目录检出。我可以通过之前的C#代码以及在那里复制的可执行文件看到正在创建的输入文件。所以问题不在于在正确的位置准备正确的文件时出错。
干杯, Xilconic
答案 0 :(得分:2)
正如Dmitriy Reznik评论的那样,指定StartInfo的WorkingDirectory解决了我遇到的问题。应该是这样的:
var analyzer = new Process
{
StartInfo =
{
FileName = Path.Combine(WorkDirectory, "analyzer.exe"),
WorkingDirectory = WorkDirectory
CreateNoWindow = false,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false, RedirectStandardError = true, RedirectStandardOutput = true // These lines were added for debugging purposes
}
};
analyzer.Start();
punProcess.WaitForExit();