4

问题

当 CF 作为服务运行与 CF 在控制台模式下运行时,在权限方面出现的区别是什么?

历史

我有一个为 Word.Application 创建 COM 对象并使用它们将 DOC 转换为 PDF 的代码。但是当我转到 CF 10u8 (64b) 时,逻辑就崩溃了。我检查了互联网,改变了 java.library.path={} 值、权限和所有可能的提示以使其工作;但没有成功。我在 Adob​​e 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> 起作用并且发生了转换。没有看到错误。我很困惑为什么会这样。使用系统帐户(谁登录)将其作为服务运行与使用相同用户帐户作为控制台运行有什么区别?我想了解什么?

调试

我在服务器上创建了一个本地用户帐户,并在“登录为...”以及使用相同帐户登录系统时都使用了该帐户。在这两种情况下,它与上面的故事相同。

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


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

信用:我在 VBScript 中的代码是从这里派生的

更新

这是我的代码,您可以使用它进行测试。

命令行代码

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

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

冷融合代码

<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>

要在本地机器上运行它,您需要

  • 安装了带有“另存为 PDF”插件的 MS Word 2007 或更高版本。
  • VBScript(从这里获取)
  • CF 10。我正在更新 8。这适用于任何更新级别。
4

3 回答 3

4

我找到了我的问题的答案。

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

  1. CF
  2. VB 脚本代码
  3. Word 应用程序 COM
  4. 视窗 2008 R2

如果不涉及 Word COM,CF 只会正常执行脚本。所以,我觉得,它基本上与访问无关。

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

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

Windows 2008 R2 - 找到罪魁祸首。

原因

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

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

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

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

它的详细在这里。(搜索“H 小川”)

再一次,努力工作和 stackoverflow 谈话是有好处的。:)

谢谢大家的帮助。

于 2013-04-05T10:49:06.150 回答
0

我认为您的问题与 windows ap 与控制台应用程序有关。可能某些部分需要控制台(Windows 桌面 gui)处于活动状态。有些服务,例如 DHCP,在那里没有依赖关系,因此作为纯服务运行良好,不可见,无需人工交互。

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

于 2013-04-03T15:45:25.367 回答
0

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

请参阅如何使用 Visual Basic 关闭 Office 应用程序显示的对话框

于 2013-04-03T17:28:02.393 回答