【问题标题】:Close Adobe Acrobat 4 (executed via batch) when file name not found找不到文件名时关闭 Adob​​e Acrobat 4(通过批处理执行)
【发布时间】:2013-04-09 22:55:36
【问题描述】:

我开发了一个解决方案,其中 PL/SQL Oracle API 生成需要打印的 PDF 的文件名(包括完整文件路径)(参数 1),然后使用 DBMS_SCHEDULER 传递该文件名和打印机名(参数2)到以下批处理文件:

    "C:\Program Files (x86)\Adobe\Acrobat 4.0\Reader\AcroRd32.exe" /t %1 %2

但是,有时传递给批处理文件的文件名不存在。因为该文件不存在 Adob​​e 继续运行(在后台)。这会阻止 API 再次执行,直到有人手动结束 Windows 进程,因为 DBMS 作业已连接到 Adob​​e 实例。

不幸的是(除非 Oracle 有办法检查目录中是否存在文件)我无法在 Oracle 端解决这个问题,因此我需要在 Windows 端解决它。

因此,我可以将任何其他逻辑添加到批处理文件或任何其他脚本中,以验证文件是否存在,如果文件不存在,则结束该过程。该解决方案必须高效,因为 PDF 文件的打印对时间很敏感。

如果有人对此问题有 Oracle 方面的解决方案,那么我很乐意提供相关代码。

提前致谢。

【问题讨论】:

    标签: oracle batch-file plsql acrobat dbms-scheduler


    【解决方案1】:

    不启动 Acrobat 比尝试关闭它更容易。您可以使用IF EXIST command 检查批处理文件中的文件是否存在:

    @IF EXIST %1 (
        "C:\Program Files (x86)\Adobe\Acrobat 4.0\Reader\AcroRd32.exe" /t %1 %2
    ) ELSE (
        REM optionally report error?
    )
    

    有多种方法可以从 Oracle 中检查文件,但这可能更简单,因为您已经有一个批处理文件,除非您想在此过程的早期测试并报告错误。

    【讨论】:

    • 谢谢 Alex,如果我想让 Else 创建一个包含 %1 的文本文件以跟踪丢失的文件,我会这样做: ... else ( echo %1 >> [输出文件/dir.txt])
    • @user2075066 - 是的,这行得通。不确定您是否将故障通知回dbms_scheduler,但如果是,则可能会在数据库中记录错误的文件名。
    • 目前没有,未来可能会有额外的发展。目前,我很难追踪dbms_scheduler 工作冲突的原因(以上是原因之一)。 Oracle API 每天由多个用户执行多次,它似乎偶尔会尝试在使用 dbms_job 时运行它,但我在 API 中包含了一个故障保护,它只允许调度程序在未运行时运行.有什么想法吗?
    • @user2075066 - 我认为这可能更适合Database Administrators
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多