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

Vbscript PDFCreator COM脚本“作为服务运行”无法看到打印的作业,vbscript,com,Vbscript,Com,我有一个在PrimalScript中编译的PDFCreator脚本,因此我可以通过svrany执行它。我遇到的问题是,当我运行服务时,队列从未看到脚本中的打印作业。如果我从会话中运行vbscript或编译的exe,它可以正常工作 以下是我的vbs文件中针对pdfcreator版本2.1.1.820运行的代码 Dim strExt, intStatus, strDestFileName, strInputFileName, strReason Set objFSO = CreateObjec

我有一个在PrimalScript中编译的PDFCreator脚本,因此我可以通过svrany执行它。我遇到的问题是,当我运行服务时,队列从未看到脚本中的打印作业。如果我从会话中运行vbscript或编译的exe,它可以正常工作

以下是我的vbs文件中针对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 
我在域凭据下运行的服务,并已修改注册表以允许它以交互方式运行

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              :
我已将交互式服务检测设置为运行状态

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

如果打开PDFCreator printer并查看打印队列,我确实会看到作业进入队列并退出,甚至可以暂停打印机,使作业停止在打印机队列中,但com对象队列不知道它的存在

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


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

如果您使用WScript,它将在第一个WScript.echo时停止。确保您正在使用CScript运行。

解决此问题的方法是将驱动程序隔离模式从默认的无更改为共享。我是在“打印管理”管理单元下完成的。花了一段时间才弄明白….

编译的exe正在cscript中执行,我已经通过任务管理器验证了cscript初始化了对vbs文件的调用。
sc config UI0Detect start=auto sc start UI0Detect rundl32 winsta.dll,winstationswitchtoservicecession
这是三行。最后一行将切换到服务桌面。在服务执行和处理输入文件时,没有任何程序需要注意或任何类型的输入。如果什么都没有发生,我就不会收到这样的消息。您需要将日志记录放到您的文件中。启用日志记录后,我上面实际使用的脚本只是我实际使用的一个简化版本,我有一个函数可以替换每个wscript.echo条目。我还启用了跟踪模式下的PDFCreator调试日志、WIndows打印服务管理和操作日志。不确定我还可以记录哪些内容来指示此处的故障点…更多信息:您需要通过服务器管理器将打印服务器角色添加到计算机,以便获取打印管理管理单元。(还有,big+1。互联网上有很多人都有同样的问题,但这是我见过的唯一不需要升级PDFCreator或脆弱黑客的解决方案。)