【发布时间】:2011-11-23 16:19:03
【问题描述】:
乍一看我没有运气
uses ShellApi;
...
ShellExecute(Handle, pchar('open'), pchar('emf2pdf.exe'),
pchar(s), pchar(root), SW_SHOWNORMAL);
其中s为参数字符串,root为命令所在目录。
我得到的错误是“缺少运算符或分号”,还有“实际参数太多”。
可能是我忽略了一些简单的事情,有点压力。甚至不知道从哪里获得句柄。
对于您可以建议的执行命令行的替代方法感到高兴!基本上,该服务会定期查找要转换的文件,所以我只是在寻找一种在 DOS 中形成命令行并执行它的方法,最好不要短暂弹出并关闭窗口,但我会采取什么我可以得到。 :)
我正确安装的 Delphi 可以为我提示参数,但在按 F1 时不会弹出帮助页面(未在索引中找到)。
更新:使用了 DelphiPages 中的 CreateProcess 函数:
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;
然后用这个命令行调用它,它在粘贴到 'cmd' 时有效,但不能用这段代码:
ExecuteAndWait('D:\EMF2PDF\emf2pdf.exe -append 0 -margin 36x36x36x36 -width 595 -height 420 "D:\EMF2PDF\EMF\example.emf" "D:\EMF2PDF\PDF\example.pdf"');
如果您能提供(链接到)上面控制台应用命令行的工作示例调用(在服务中),我会很高兴。
更新: 有问题的命令不会打开任何窗口,但会在控制台中输入转换的统计信息。我用的软件可以在这里下载:http://www.verydoc.com/emf-to-pdf.html
此外,我直到现在才被告知所讨论的服务器是虚拟服务器,如果这会有所不同的话。
刚刚检查过,当我试用我的服务时,我以远程会话用户身份登录。当 Windows 以登录用户运行时,该服务是否至少能够创建一个调用 emf2pdf 的进程?
如果您能想到在此服务器上(例如批处理用户)在这些条件下或其他情况下使用 Verydoc 软件的替代解决方案,我很乐意尝试!
【问题讨论】:
-
1.您是否尝试过标准应用程序?那里会发生什么?在它可以从标准应用程序中运行之前,不要尝试从服务中调试它。 2.
s有什么价值,root有什么价值? 3. 你在用什么操作系统。如果您使用的是 Vista 或更高版本,则无需担心服务会出现任何 Windows。 -
1.这在普通应用程序中运行良好,但是粘贴到 Execute 线程中的相同代码行甚至无法如上所述编译。 2. s=misc 特定于 emf2pdf 命令的开关,root='D:\EMF2PDF'。 3. Windows Server 2008 R2 标准版,64 位。
-
有些事情我不清楚。您调用
CreateProcess的服务是否在系统帐户下运行?您想在某个用户的桌面上运行emf2pdf.exe。你如何识别用户?例如可以使用模拟它吗?您知道哪些信息可以识别用户的会话?另一个问题:您想让进程emf2pdf.exe在服务凭据下还是在用户凭据下运行? -
不,我不想想要在某些用户的桌面上运行它。但似乎有必要?因为 Windows 中没有合适的 shell。至于凭据,它只需要将文件读/写到一个临时文件夹。该服务在本地系统帐户下运行,此虚拟服务器上的任何用户都会收到通知(来自“桌面 0”?)
标签: windows delphi winapi service delphi-7