ColdFusion'Run As Service'Vs'在Console中运行'

时间:2013-04-03 10:31:41

标签: coldfusion vbscript ms-word console-application windows-server-2008-r2

问题

当CF作为服务运行时,权限方面出现的差异Vs CF是否以控制台模式运行?

记录

我有一个为Word.Application创建COM对象的代码,并使用它们将DOC转换为PDF。但当我转向CF 10u8(64b)时,逻辑就破裂了。我检查了互联网,围绕更改java.library.path = {}值,权限和所有可能的提示,以使其工作;但没有成功。我找到an entry in the Adobe Bug Base来确认jintegra \ bin \ ntvinv.dll是否可以在32b环境中运行。

因此,我使用VB脚本模式将我的CF代码转换为VB脚本并进行DOC转换为PDF。

问题

VB Script中的代码很漂亮,它可以满足我的需求。在我从< cfexecute>调用此.vbs之前,似乎没问题。它永远处理,超时,没有任何显示+在任务管理器中放弃了WINWORD.exe进程。

我尝试将参数写入批处理文件并调用它。这次它立即运行,但没有任何反应。我检查了日志,它显示为

  

Microsoft VBScript运行时错误:所需对象:'wdocs.Open(...)

我从命令提示符调用批处理文件,它执行时没有错误。我的DOC - > PDF转换完成。

所以,这次我将ColdFusion服务'登录为...'权限从“本地系统帐户”更改为系统的管理员用户帐户并启动它。我明白了,

  

本地计算机上的CF 10应用程序服务器服务已启动然后停止。如果某些服务未被其他服务或程序使用,则会自动停止

所以,那里的路尽头。我尝试过播放“允许服务与桌面交互”选项。但没有任何改善。

最后,我尝试从bin \ cfstart.bat文件运行CF.它有 coldfusion.exe -start -console 。命令窗口出现,CF启动。 这次,< cfexecute>工作和转换发生了。没有看到任何错误。我很困惑为什么会这样。将它作为具有系统帐户的服务(谁登录)运行作为具有相同用户帐户的控制台运行的V会有什么区别?我错过了什么?

调试

我已在服务器上创建了一个LOCAL用户帐户,并在“登录为...”中使用了该帐户,并使用相同的帐户登录系统。在这两种情况下,都与上述情况相同。

我觉得这是一个许可问题,我无法弄清楚这是在哪里以及为什么会发生这种情况?特别是为什么在服务模式而不是在控制台模式?


注意:在进入VBS之前,我尝试使用< cfdocument format =“pdf”...>,但由于我的DOC中的某些特定格式,它会抛出异常。所以,现在不是一个选择。

信用:VBScript中的我的代码来自here

更新

这是我可以测试的代码。

命令行代码

  

/ c< pathToTheScriptFile> /doc2pdf.vbs< absolutePathTo> aWordDocument.doc o /:< absolutePathTo> finalPDFDocument.pdf

doc2pdf.vbs有两个参数。第一个是wordDocument名称(带路径),第二个是可选的PDFDocument名称。如果未传递可选参数,则将wordDocument的相同名称赋予PDFDocument。

ColdFusion代码

<cfexecute name="c:\windows\system32\cmd.exe" arguments="#commands#" outputFile="output.txt" errorFile="error.txt" timeout="20"/>

或者您也尝试使用Java运行时对象

<cfscript>
    objJR  = createObject("java", "java.lang.Runtime").getRuntime();
    result = objJR.exec(commands);
    writeDump(result);
</cfscript>

要在本地计算机上运行,​​您需要

  • 安装了MS Word 2007或更高版本,并附带了“另存为PDF”插件。
  • VBScript(从here获取此信息)
  • CF 10.我正在使用Update 8.这适用于任何更新级别。

3 个答案:

答案 0 :(得分:4)

我找到了问题的答案。

我尝试回到基础并检查所有相关组件的问题。

  1. CF
  2. VB脚本代码
  3. Word Application COM
  4. Windows 2008 R2
  5. 如果没有涉及Word COM,CF只是执行脚本。所以,我觉得,它基本上与访问无关。

    从COMMAND窗口执行时,VB脚本代码很好,但是当我们从服务(CF服务)调用它时则不行。所以,我也排除了VB Script麻烦

    Word应用程序COM - 与VB脚本相同

    Windows 2008 R2 - Culprit nabbed。

    原因

    这是由于Windows 2008服务器中的错误。它与用户配置文件有关。即使我说,在我的服务上登录,创建的COM总是使用LOCAL SYSTEM帐户。我在Proc Mon中找到了这个。

    从这一点开始,我检查了2008年的MS论坛以及与COM对象相关的问题。

    有很多文章,但其中一篇与我的问题明显相同,但使用Excel。

    答案是 - “对于办公自动化(通过脚本和非基于窗口的操作进行访问),需要在系统配置文件中有一个名为”Desktop“的文件夹。”

    详细here。 (搜索'H Ogawa')

    再一次,努力工作和stackoverflow谈话付出了很多。 :)

    谢谢大家的帮助。

答案 1 :(得分:0)

我认为你的问题与windows ap vs console app有关。 可能有些部分需要控制台(windows desktop gui)才能激活。 有一些服务,例如DHCP,那里没有依赖关系,因此在没有人工干预的情况下作为纯服务运行良好的隐形。

也许只是一个想法尝试来自sysinternals的进程监视器,它有时会显示允许的内容和不允许的内容。

答案 2 :(得分:0)

也可能会弹出一些对话框。你可能没有看到这些。您可以尝试通过将Application.DisplayAlerts设置为false来禁用它们。

请参阅How To Dismiss a Dialog Box Displayed by an Office Application with Visual Basic