【发布时间】:2019-01-16 14:40:34
【问题描述】:
我编写了一个简单的 VBScript 代码:
- 打开 Excel 工作簿
- 使 Excel 工作簿可见
- 将 Sheet1 的 Cell(1,1) 的内容更新为当前系统时间
- 保存 Excel 工作簿
代码如下:
Option Explicit
Dim objExcel, objBook, objSheet, strPath
strPath = "C:\Users\a614923\Work Repository\Local\Test Complete\Working\05012019\bonn-6.11.9_Regression\FIL_REGRESSION\Stores\Files\ExternalDriver\Test.xlsx"
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = False
Set objBook = objExcel.Workbooks.Open(strPath)
Set objSheet = objBook.Sheets("Sheet1")
objSheet.Cells(1,1) = "Time: " & time
objBook.Save
'objBook.Close
'objExcel.Quit
当我运行这个 VBScript 文件时(直接通过双击,而不是通过 Jenkins),上面提到的所有 4 个步骤都运行良好。 当我通过 Jenkins 运行相同的文件时,会发生以下情况:
- Excel 工作簿已打开
- Sheet1 的
Cell(1,1)的内容更新为当前系统时间 - Excel 工作簿已保存
问题是 Excel 工作簿不可见。我已经坚持这一步已经好几个小时了。今天是我第一次使用 Jenkins。我缺少任何 Jenkins 配置吗?有人遇到过这个问题吗?
我在 Jenkins 上运行 Windows 批处理命令 来实现同样的效果:
C:\Windows\SysWOW64\cscript.exe "C:\Users\a614923\Work Repository\Local\Test Complete\Working\05012019\bonn-6.11.9_Regression\FIL_REGRESSION\Stores\Files\ExternalDriver\TEST.vbs"
这是运行构建后我的构建控制台的样子:
由用户 Gurmanjot Singh 发起 在工作区 C:\Program Files (x86)\Jenkins\workspace\SuiteRunner 中构建 [SuiteRunner] $ cmd /c 调用 C:\WINDOWS\TEMP\jenkins2976471610072523635.bat C:\Program Files (x86)\Jenkins\workspace\SuiteRunner>C:\Windows\SysWOW64\cscript.exe "C:\Users\a614923\Work Repository\Local\Test Complete\Working\05012019\bonn-6.11.9_Regression \FIL_REGRESSION\Stores\Files\ExternalDriver\TEST.vbs" Microsoft (R) Windows 脚本宿主版本 5.8 版权所有 (C) 微软公司。版权所有。 C:\Program Files (x86)\Jenkins\workspace\SuiteRunner>exit 0 完成:成功任何帮助/建议将不胜感激。
【问题讨论】:
-
Jenkins 正在后台运行其作业,就像 Windows 任务计划程序所做的一样(当您将任务配置为以不同用户身份运行时)。即使您使 Excel 可见,它也会在不同的上下文中变得可见(即对交互式用户不可见)。
-
您必须遵守此处的 9 条规则之一 - docs.microsoft.com/en-us/windows/desktop/api/winuser/…
-
感谢@AnsgarWiechers 和@catcat 的建议。我终于能够解决这个问题。我之前将 Jenkins 作为 Windows 服务运行,它以非交互模式打开应用程序。当我使用命令
java -jar jenkins.war通过命令提示符启动 jenkins 时,我能够启动 excel 并且它也是可见的。再次感谢您为我指明了正确的方向。 Reference -
@Gurman 如果您在服务的属性对话框的“登录”选项卡上选中了“允许服务与桌面交互”,您可能仍然可以使用 Windows 服务完成此操作(将需要作为 LocalSystem 运行才能使用此选项)。
-
@Lankymart 允许特权服务与桌面交互是一个可怕的想法,它允许各种混乱。微软积极discourages this。 Jenkins 及其插件动物园(从最坏的意义上来说)可能特别容易受到攻击。