1

作業中のモジュールについて、コンパイル済みのMatlab実行可能ファイル(.dllなどではなくスタンドアロンの.exeであることに注意してください)を受け取りました。これを実行して、分析作業を行う必要があります。

ワークフローは、入力ファイル(単純な.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#を介してそれを使用する際のコンテキストによるものですか?または、アナライザー自体に問題がある可能性がありますか?アナライザー実行可能ファイルのソースにアクセスできないため、その部分をデバッグできません。

発生するエラーは、与えられた警告が原因である可能性があり、ダブルクリックする(またはcmdから実行する)ときに暗黙的に利用できるある種の参照(MCRへの参照)を見逃している可能性があります。魅力)?

ワークディレクトリがチェックアウトします。以前のC#コードによって入力ファイルが作成されていることと、実行可能ファイルがそこにコピーされていることがわかります。したがって、問題は正しい場所に正しいファイルを準備する際の間違いによるものではありません。

乾杯、Xilconic

4

1 に答える 1

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();
于 2012-08-22T09:40:08.437 に答える