2016-06-25 9 views
-3

私は2人のアプリケーションが誰もが異なるタスクを実行しているので、最初のアプリケーションはshellExecuteを使って2番目のアプリケーションを実行します。私は別のアプリケーションからshellExecuteを使ってアプリケーションを実行するとTResourceStreamが動作しない

ShellExecute(Handle, nil, PChar('D:\Project2.exe'), nil, nil, SW_SHOWNORMAL); 
ShellExecute(Handle, nil, PChar('cmd.exe'), PChar('/C D:\Project2.exe'), nil, SW_SHOWNORMAL); 

第2のアプリケーションは、その内部に既に存在するリソースを抽出します。

問題は:最初のアプリケーションから2番目のアプリケーションを実行するとリソースが抽出されませんアプリケーションフォームが私に表示されますが、2番目を直接実行するとリソースが抽出されます。

CreateProcessWinExecも試してみましたが、リソースも抽出されていません!!

編集: Project1の

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ShellExecute(Handle, nil, PChar('D:\Project2.exe'), nil, nil, SW_SHOWNORMAL); 
end; 

のみオープンProject2のボタンを持っている、これは作成セクションでリソースを抽出する必要があり、のProject2コードです!

+1

実際のコードは表示されませんが、通常の作業ディレクトリの問題だと思います。 –

+0

プログラムに欠陥があります。コードを持つ誰かだけがそれを修正できます。 –

+0

@Free呼び出しプロセスの作業ディレクトリは 'TResourceStream'には何の影響も与えません。 'TResourceStream'が失敗する唯一の方法は、間違った' HInstance'がコンストラクタに渡された場合です(正しいリソースID /名前が渡されていると仮定して)。 –

答えて

0

考えられる唯一の説得力のある説明は、最初のアプリケーションが2番目のアプリケーションが書き込もうとしているDLLを読み込んでいることです。実行可能ファイル(.exe、.dll、.ocxなど)がロードされると、そのファイルはロックされ、書き込めません。問題が解決された

+0

あなたはそれを言うことができ、私はproject1でshellExecuteを使ってproject2を開きます –

1

、 私はShellExecuteを使用してpreject1からのProject2を開いた場合、GetCurrentDir関数はProject1のディレクトリがPROJECT2ない取得、Project2のディレクトリを取得するためにGetCurrentDirを使用!!!!

私はExtractFilePath(Application.ExeName) instedをGetCurrentDirと使用しています。

だから問題はTResourceStreamにありません、それはGetCurrentDirにあります!

関連する問題