PDFCreator COM 脚本 运行 因为服务无法看到打印的作业

PDFCreator COM Script Run as Service Fails to see Jobs Printed

我有一个用 PrimalScript 编译的 PDFCreator 脚本,这样我就可以通过 svrany 执行它,我 运行 遇到的问题是当我 运行 服务打印作业时来自脚本的队列永远不会看到。如果我 运行 我的会话中的 vbscript 或编译的 exe,它工作正常。

这是我的 vbs 文件中的代码,运行s 针对 pdfcreator 版本 2.1.1.820

Dim strExt, intStatus, strDestFileName, strInputFileName, strReason 


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
Set PDFCreatorQueue = CreateObject("PDFCreatorBeta.JobQueue")

strInputFileName = "C:\Temp\Test.txt" 
strDestFileName = "C:\Temp\Test.pdf"

PDFProcess 

' ** Sub Routine to render file as PDF
Sub PDFProcess  
Dim objFolder, job, intStatPDFCreator, intPageCount

intPageCount = 1  

WScript.Echo "PDF Destination Name: " & strDestFile 
WScript.Echo "Initializing PDFCreator queue..."
intStatPDFCreator = PDFCreatorQueue.Initialize()
WScript.Echo "PDFCreator Object Status: " & intStatPDFCreator 

If intStatPDFCreator = 0 Then 
        If Not objFSO.FileExists(strInputFileName) Then
            WScript.Echo "PDFCreator: Can't find the file: " & strInputFileName
        Else 
            WScript.Echo "Printing Page: " & strInputFileName 

            objShell.ShellExecute strInputFileName, "", "", "print"

            WScript.Sleep 1000
            WScript.Echo "Currently there are " & PDFCreatorQueue.Count & " job(s) in the queue" 
        End If

    WScript.Echo "Waiting for the job to arrive at the queue..."
    if Not(PDFCreatorQueue.WaitForJobs(intPageCount, 10)) Then 
        strReason = "The print job did not reach the queue within " & 10 & " seconds" 
        WScript.Echo strReason 
        intStatus = 0
    Else
        WScript.Echo "Currently there are " & PDFCreatorQueue.Count & " job(s) in the queue" 
        WScript.Echo "Getting job instance and merging"

        PDFCreatorQueue.MergeAllJobs

        while(PDFCreatorQueue.Count > 0)
            Set job = PDFCreatorQueue.NextJob
                WScript.Echo "Staging PDF File: " & strDestFileName 
            job.ConvertTo(strDestFileName)
                WScript.sleep 5000

            If Not(job.IsFinished Or job.IsSuccessful) Then
                strReason = "Could not convert the file: " & strDestFileName
                    WScript.Echo strReason 
                intStatus = 0
            Else
                WScript.Echo "Job finished successfully" 
            End If 
        Wend 
    End If 
        WScript.Echo "Releasing the object"
    PDFCreatorQueue.ReleaseCom()
Else
    strReason =  "Failed to create PDFCreator COM instance."
        WScript.Echo strReason 
    intStatus = 0
End If


End Sub 

我在我的域凭据下 运行ning 的服务并修改了注册表以允许它 运行 交互

SERVICE_NAME: tgprintprocessor
    TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
    STATE              : 4  RUNNING
                            (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0
    PID                : 3752
    FLAGS              :

我已将交互式服务检测设置为 运行ning 状态。

查看 PDFCreator 跟踪日志我没有看到任何类型的错误。

如果我打开 PDFCreator 打印机并查看打印队列,我确实看到作业进入队列并退出,甚至可以暂停打印机以便作业停止在打印机队列中,但 com 对象队列没有注意到它存在。

我还尝试了 运行ning PDFCreator.exe 作为一项服务,因为它需要在后台有一个 exe 运行ning 实例,因为我注意到应用程序本身没有在任务管理器中启动 post 打印作业提交就像我在手动执行脚本时通常看到的那样。

我的问题是什么,我想我不知道还有什么地方可以看,如果我可能遗漏了什么我可以添加到上面的测试脚本来尝试解决问题。

如果您使用的是 WScript,它将在第一个 wscript.echo 处停止。确保您是 运行 CScript。

此问题和上述行为的解决方案是将驱动程序隔离模式从默认 NONE 更改为共享。我在 Print Management Snapin 下做了这个。花了一段时间才弄明白....