问题
当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>
要在本地计算机上运行,您需要
答案 0 :(得分:4)
我找到了问题的答案。
我尝试回到基础并检查所有相关组件的问题。
如果没有涉及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