私は、TProcessを使ってTextEditを起動しようとしていますが、Terminal上で起動されたコマンドラインプログラムである呼び出し側プログラムによって書き込まれ、閉じられたテキストファイルを与えています。Mac OS X TerminalでFreePascalのTProcessを使用して起動した後、TextEditがドキュメントの権限を拒否するのはなぜですか?
これを初めて実行すると(以下の抜粋を参照)、動作します。この場合は、コンピュータを再起動してからTextEditがまだ使用されていない場合です。
しかし、GetInfoはを使用して、私は権限が完全に正常で見つけ、そして私はdificulty開口部を持っていない:テキストエディットは、以前に使用された後、その後、後続のすべての試験では
は、テキストエディットは言っモーダルエラーメッセージをreurns TextEditで '手動で'ファイルを開きます。
TextEditが起動してドキュメントが見つかるため、起動自体に何か問題はないと思われます。私は同期的に起動しようとしましたが、TextEditの権限メッセージは変更されませんでしたが、強制終了する必要がありました。その後、呼び出しプログラムはハングアップしましたが終了しませんでした。
ここで何が起こっているのか、それを修正する方法は誰でも知っていますか?
...
procedure launch (prm :array of string; syn :LaunchSyncType);
var
X :integer;
Proc: TProcess;
begin
Proc := TProcess.Create(nil);
with Proc do begin
try
Executable:= prm[0]; {exe;}
for X := 1 to high(prm) do
Parameters.Add(prm[X]);
InheritHandles := False;
for X := 1 to GetEnvironmentVariableCount do
Environment.Add(GetEnvironmentString(X));
ShowWindow := swoShow; {used by Windows only}
if syn = Synchronous then
Options := Options + [poWaitOnExit]
else begin {asynchronous}
Options := [];
end;
Execute;
finally
Free;
end;
end;
end;
...
launch(['/Applications/TextEdit.app/Contents/MacOS/TextEdit',
'/Users/lor/LorDev/LOR/DocName.PRN'],
Asynchronous);
私は、ユースケースを追った完全にわからないんだけど、問題はおそらく、サンドボックスによるものです。サンドボックスプロセスがサブプロセスを作成すると、サブプロセスはサンドボックスを継承しますが、PowerBox(開いているダイアログ)によって追加された一時的なアクセス権は継承されません。 –
@Kenそれは興味深い提案です。私は他のプログラム、AdobeのPDF Reader、Openコマンド、および私が書いたいくつかのプログラムを呼び出すのと同じ方法を(上記と同じように)数回使いましたが、どれも同じ問題を抱えていませんでした。しかし、私はInheritHandlesをtrueに設定しようとして、何が起こるか見てみましょう。 – Lor
@Ken 'InheritHandles:= True'を設定しても何の助けにもなりませんでした。私はTextEditの代わりに '/ usr/bin/open'を起動することで問題を回避していますが、ドキュメント名の接尾辞がデフォルトのオープンハンドラとしてTextEditで設定されている.PRNなので動作します。これは、適切なデフォルトオープナを持たないドキュメント名の接尾辞を助けるものではありません。 – Lor