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 下做了这个。花了一段时间才弄明白....
我有一个用 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 下做了这个。花了一段时间才弄明白....