ShellExecuteEx命令在Isapi中成功,但不在CGI中成功

时间:2018-02-08 21:34:20

标签: delphi iis cgi isapi htmldoc

我正在使用Delphi Tokyo 10.2。我有以下功能:

function THtmlToPdfService.ExecuteShell(filename, outFilename : string) : Boolean;
var
  shellInfo : TShellExecuteInfo;
  exitCode : DWORD;
begin
  Result := false;
  try
    // Set Shell execution information
    FillChar(shellInfo, SizeOf(shellInfo), 0);
    shellInfo.cbSize := SizeOf(TShellExecuteInfo);
    shellInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
    shellInfo.Wnd := 0;
    shellInfo.lpFile := PChar(GetHtmlDocInstallDirectory + 'htmldoc.exe');
    shellInfo.lpParameters := PChar(Format(' --webpage --datadir ' +
      GetHtmlDocInstallDirectory + ' -f %s %s', [outFilename, filename]));
    shellInfo.nShow := SW_HIDE;

    // Run ShellExecuteEx to wait for process to complete
    if ShellExecuteEx(@shellInfo) then
    begin
      repeat
        Application.ProcessMessages;
        GetExitCodeProcess(shellInfo.hProcess, exitCode) ;
      until (exitCode <> STILL_ACTIVE);

      if FileExists(outFilename) then
        Result := true
      else
        RaiseLastOSError;
    end;
  except
    raise;
  end;
end;

这很简单,执行HTMLDoc.exe,使用文件名作为源HTML文件,outFilename作为目标输出PDF文件。我在我的localhost上运行的Isapi DLL和CGI EXE中都使用了相同的单元。我有一个本地测试exe,它从我的localhost调用Web服务,当我调用Isapi服务时,它工作得很好...输出PDF已创建,并且调用此函数的函数将该PDF返回给用户一个字节数组。当我从同一测试模块调用CGI服务时,它不会创建输出PDF,它只返回:

System Error.  Code: 2.  The system cannot find the file specified

其他一切工作正常,但它不会创建我需要的输出文件。我已经尝试了权限,身份验证,我尝试了不同的格式化文件的方法,我甚至尝试先创建PDF,希望只是将文件放在那里,即使这对Isapi无关紧要服务。我已经验证HTMLDoc和源文件都可以在此命令执行时找到,如果我首先创建PDF,则服务将空白PDF返回给用户,但我需要HTML文件在CGI中正确转换。有什么想法吗?

0 个答案:

没有答案