0

重複の可能性:
Server.MapPath と、ASP.NET アプリケーションからのコマンド ライン ユーティリティの実行

バックグラウンド:

このphantomjs ツールを使用して、SVG を PNG にラスタライズしようとしています。EXE を自分で手動で実行すると動作しますが、C# のメソッドから動作させることはできません。パスと引数が正しいことを確認するために、ブレークポイントも設定しました。

このメソッドは、SVG を保存することから開始file:///C:/SVG/します。これは正常に行われます。次に、ASP.NET プロジェクトにある EXE を実行してみます (ツールで使用される .js ファイルもそこにあります)。上記のリンクを確認すると、EXE は次のように実行されますphantomjs.exe rasterize.js [source] [destination]。したがって、ソースは新しく作成された SVG ファイルであり、宛先は ASP.NET プロジェクト内のフォルダー (EXE があるフォルダーと同じ) です。これは、Server.MapPath または IIS のアクセス許可と関係があると推測していますが、困惑しています。

コードは次のとおりです。

// the EXE and the .js file are both located in 'ProjectRoot/Utilities/'
// filename is the newly created SVG file - 'whatever.svg'
string filepath = "C:/SVG/";
string serverPath = Server.MapPath("/Utilities/");
string args = " rasterize.js " + Path.Combine("file:///", filepath, filename) + " " + filename.Replace(".svg", ".png");
Process p = Process.Start(new ProcessStartInfo(serverPath + "phantomjs.exe", args));
p.WaitForExit(3000);

実行しても例外はスローされず、PNG ファイルの作成に失敗するだけです。デバッグして値を取得し、自分でツールを実行すると、正常に動作します。問題を絞り込むにはどうすればよいですか?

4

1 に答える 1

0

同じコードのデバッグ実行とリリース実行の違いは、通常、競合状態が原因です。この場合、SVG を作成するコードは、Process.Start を呼び出す前に実行が終了していない可能性が高いため、何も起こりません。

于 2012-10-14T09:58:19.537 に答える