如果我使用shellExecute从另一个应用程序运行我的应用程序,TResourceStream无法正常工作

时间:2016-06-25 14:59:54

标签: delphi resources delphi-xe7

我有两个应用程序,每个人都执行不同的任务,第一个应用程序使用shellExecute运行第二个应用程序。

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);

第二个应用程序提取其中已存在的资源。

问题是:当我从第一个应用程序运行第二个应用程序时,资源未提取虽然申请表单显示给我,但如果我直接运行第二个“双击”提取的资源!

我还尝试了CreateProcessWinExec,资源也没有提取出来!!

修改 project1 只有一个按钮打开project2

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

这是 project2 代码,在创建部分中必须提取资源!

procedure TForm1.FormCreate(Sender: TObject);
var
  DllRS: TResourceStream;
begin
    DllRS:= TResourceStream.Create(HInstance, 'dllFile', 'dll');
    try
      DllRS.SaveToFile(GetCurrentDir + '\dllFile.dll');
    finally
      DllRS.Free;
    end;
end;

2 个答案:

答案 0 :(得分:1)

问题已经解决, 我使用GetCurrentDir获取project2目录,如果我使用ShellExecute从preject1打开project2,GetCurrentDir函数获取project1目录而不是project2 !!!!

我使用ExtractFilePath(Application.ExeName) GetCurrentDir TResourceStream,但它的工作正常!

所以问题不在GetCurrentDir中,而是EntitySetMgrFactory<T>中的问题!

答案 1 :(得分:0)

我能想到的唯一可信的解释是第一个应用程序加载了第二个应用程序试图写入的DLL。当加载可执行文件(.exe,.dll,.ocx等)时,该文件被锁定且无法写入。