让Windows服务可以启动一个子进程来产生PDF

最近,研究了一下后台静默批量生成PDF的方法。

最初的想法是写一个PdfCreate.exe 命令行,exe通过fastreport组件产生PDF(为了复用之前创建好的表单),

然后再写一个windows服务PDFCreateService , 做任务调度,启动PdfCreate.exe程序来产生PDF,PdfCreate.exe 处理完任务之后,就退出。

然而实际测试发现,PDFCreateService服务无法正常的启动PdfCreate.exe。也做过很多研究,起初认为是由于Session 0 无法穿透的原因。

以为需要调用CreateProcessAsUser 或 CreateProcessWithLogonW . 但发现

最后发现,影响子进程是否正常启动的因素是:指定服务启动的账户。如果指定服务用Administrator来启动。在服务中用CreateProcess API可以正常的启动exe产生pdf。用本地系统账户 或者 LOCAL Service 都不行。

PdfCreat.exe 则是直接使用WinMain的函数

原文地址:https://www.cnblogs.com/songr/p/14124862.html