Ghostcript(GS)を使用してWindows 10システムでPDFファイルを修正していますが、一般的な問題はあると思いますが、実際にはGSには関係しません。System.Diagnostics.Processの書き込みアクセス
GSをコマンドプロンプトから実行すると正常に動作します。 C#コードで作成されたプロセスから同じことをしようとすると、エラーが発生します。私は、問題は、私のプロセスが出力ファイルが作成されているフォルダへの書き込みアクセス権を持っていないことが原因であると思われる。
私の質問は以下のとおりです。
はどのようにして、ターゲットフォルダのアクセス許可を開くのですか?書き込み権限を与えるには、誰に、または私に何を必要としますか?私はエクスプローラを使って "Everyone"に "フルコントロール"を許可しようとしましたが、それは助けになりませんでした。
私は自分のプロセスに何とか "スーパー"な力を与えて、どこにでも書くことができますか? (私はセキュリティ上の問題を心配していません)。ここで
はGSコマンド(作品)です:
gswin64c.exe -sDEVICE=pdfwrite –q -o outFile.pdf -c "[/CropBox [72 72 144 216] /PAGES pdfmark" -f inFile.pdf
そして、ここでは(動作しない)、この同じコマンドを実行しようとしている私のC#のコードです:
using System;
using System.Diagnostics;
namespace pdfcropper
{
class Program
{
static void Main()
{
string gspath = @"D:\ciao\Documents\Visual Studio 2013\Projects\itextsharp\gswin64c.exe";
ProcessStartInfo psi= new ProcessStartInfo(gspath);
psi.UseShellExecute = false;
psi.WorkingDirectory = @"D:\ciao\Documents\Visual Studio 2013\Projects\itextsharp";
psi.Arguments = @" -sDEVICE=pdfwrite -dBATCH –q -o outFile.pdf -c ""[/CropBox [72 72 144 216] /PAGES pdfmark"" -f inFile.pdf";
Process myProcess = new Process();
myProcess.StartInfo = psi;
myProcess.Start();
myProcess.Close();
}
}
}
私が取得エラーメッセージは次のとおりです。
**** Unable to open the initial device, quitting.
Unrecoverable error: undefinedfilename in setpagedevice
これはかなりわかりにくいですが、出力ファイル(outFile.pdf)の作成に関連していると思われます。
'outFile.pdf'の代わりに完全なpathspecを指定してください。すでに 'outFile.pdf'を開いている場合、GSがファイルを開いて書き込みできないため、コマンドは失敗します。おそらく入力ファイルも同様に指定する必要があります。私は問題が現在の作業ディレクトリが正しくないと思われると推測します。 – KenS
@KenS:ご協力いただきありがとうございます。私は、異なる作業ディレクトリと完全なパス名で多数のバリエーションを試しました。私は最終的にitextsharp APIを呼び出すことにしましたが、それはうまくいきました。しかし、私はGSの使用に何が問題なのかを理解したいと思います。とにかくGSを呼び出す必要があります。 – bubba
それを推測するのは難しいです。最初のことは、-qを削除することです。デバッグ時にメッセージを抑制したくはありません。私は、Ghostscriptプロセスがその親プロセス(つまりあなたのプロセス)の特権を継承することを期待していますが、C#を書いていないので、私は確信が持てません。おそらく、Processクラスのドキュメントにその情報があります。このエラーはPostScript環境から返され、指定されたデバイスを開くことができなかったことを意味します。 PostScriptはそれ以上の情報を与えることはできません。子のGhostscriptプロセスをデバッグできる場合は、Cコードでどこを停止するかを教えてください。 – KenS