乍一看执行一个命令行我在与从服务的执行线程
uses ShellApi;
...
ShellExecute(Handle, pchar('open'), pchar('emf2pdf.exe'),
pchar(s), pchar(root), SW_SHOWNORMAL);
没有运气s是参数字符串和根就是命令所在的目录。
我得到的错误是'缺少运算符或分号',还有'太多实际参数'。
大概是我忽视的东西,有点压力。甚至不知道从哪里拿到手柄。
对执行命令行的替代方法感到高兴,您可以建议!基本上服务查找文件定期转换,所以我只是寻找一种方式来形成一个命令行,如在DOS和执行它,最好没有一个窗口短暂弹出和关闭,但我会采取什么我可以得到。 :)
我正确安装的德尔福可以代码提示参数为我,但不弹出帮助页上按F1(索引中找不到)。
更新:使用该CreateProcess函数从DelphiPages:
ExecuteAndWait('D:\EMF2PDF\emf2pdf.exe -append 0 -margin 36x36x36x36 -width 595 -height 420 "D:\EMF2PDF\EMF\example.emf" "D:\EMF2PDF\PDF\example.pdf"');
我:
Function ExecuteAndWait(sExecutableFile : String; wWindowState : Word = SW_SHOWNORMAL) : Boolean;
var
siInfo : TStartUpInfo;
piInfo : TProcessInformation;
begin
FillChar(siInfo, SizeOf(siInfo), #0);
with siInfo do begin
cb := SizeOf(siInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := wWindowState;
end;
Result := CreateProcess(NIL, pChar(sExecutableFile), NIL, NIL, FALSE, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL, pchar(ExtractFilePath(sExecutableFile)),siInfo, piInfo);
if Result then
WaitForSingleObject(piInfo.hprocess,INFINITE);
end;
然后用这个命令行中,“加利福尼亚”粘贴时,但没有与此代码工作称它为如果你可以提供(链接到)上面的控制台应用程序命令行的一个工作示例调用(在服务中),那么我会很高兴。
更新: 有问题的命令不会打开窗口,而是在控制台中键入转换的统计信息。我使用的软件可以在这里下载:http://www.verydoc.com/emf-to-pdf.html
此外,我直到现在才被告知服务器是虚拟服务器,如果这有所作为。
刚刚检查,当我尝试使用我的服务时,我以远程会话用户身份登录。当Windows使用登录用户运行时,该服务是否能够至少创建一个调用emf2pdf的进程?
如果您可以考虑使用Verydoc软件的替代解决方案,那么在这些条件或其他条件下,在此服务器上(例如批处理用户),我很乐意尝试它们!
1.您是否尝试过使用标准应用程序?那里会发生什么?不要尝试从服务中调试它,直到它从标准应用程序中运行。 2.''有什么价值,'root'有什么价值? 3.你在做什么操作系统。如果您使用的是Vista或更高版本,则无需担心任何Windows出现在服务中。 –
1.在正常的应用程序中运行正常,但如上所述,粘贴到执行线程中的相同代码行甚至不能编译。 2. s =特定于emf2pdf命令的misc开关,root ='D:\ EMF2PDF'。 3. Windows Server 2008 R2 Standard,64位。 –
有些事情我不清楚。您的服务调用'CreateProcess'在系统帐户下运行吗?你想在某个用户的桌面上运行'emf2pdf.exe'。你如何识别用户?可以用它来模拟它吗?您知道哪些信息来识别用户的会话?另一个问题:您是否希望在服务凭证或用户凭证下运行“emf2pdf.exe”进程? – Oleg