重複の可能性:
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 ファイルの作成に失敗するだけです。デバッグして値を取得し、自分でツールを実行すると、正常に動作します。問題を絞り込むにはどうすればよいですか?