我在 Windows 7 上工作(作为 session 1 登录),我的 Jenkins CI 在 session 0 中作为 Windows 服务运行。 我的问题是..我想在 session 0 中通过 Jenkins CI 打开一个 Excel 文件,但想在 session 1 中显示它的 GUI。
我知道 session 0 在 Windows 7 中是隔离的,但是否可以在 session 0 中运行一个进程,然后在另一个 session 中输出?请帮忙。
最佳答案
编辑:
进行了一些尝试和错误,但这最终对我有用(Windows 7 64 位)。
- 下载PsTools来自微软网站
- 我们只需要
psexec.exe
,但您可以提取所有内容。提取到 Jenkins 可以访问的某个位置,最好路径中没有空格。 - 打开提升的命令提示符:在“开始”的快速搜索中键入
cmd
,右键单击cmd.exe
,选择以管理员身份运行
。 - 键入
C:\path\to\psexec.exe -accepteula
并按回车键。 - 键入
C:\path\to\psexec.exe -i 1 cmd
并按回车键。 (如果你看到命令提示符出现,一切都很好,现在关闭它) - 在Job configuration中,配置Execute Windows Batch command步骤
- 写下以下内容:
C:\path\to\psexec.exe -accepteula && C:\path\to\psexec.exe -i 1 cmd/c start C:\PROGRA~2\MICROSO~1\path\to\excel.执行程序
地点:
C:\path\to
是您到psexec.exe
的完整路径,除非它在您的%path%
中-i 1
是您要在其中启动的 session ID。C:\PROGRA~2\MICROSO~1\path\to
是excel.exe
的完整路径没有空格。由于大多数 Office 安装将位于带空格的路径下,例如“Program Files (x86)”,您必须找出最短的路径,或将其放置在没有空格的地方。- 在
%path%
下安装excel.exe
并使用常规命令行是不够的。
给关心的人一点解释:
psexec
需要先安装一个服务。为此,它需要第一次从提升的命令提示符下运行。这是一次性安装步骤。- 要使
psexec
正常工作,您需要接受 EULA 提示。这是按 session /用户完成的。因此,即使您在命令提示符下运行psexec -accepteula
,当 Jenkins 服务(在 session 0 中作为本地系统运行)尝试使用它时也无济于事。因此,您必须将其与命令一起放入 Jenkins 作业中。从技术上讲,它只需要存在一次,之后就可以将其删除,但将它保留在那里绝对没有坏处。 - 我使用了
cmd/k
并从我的本地 cmd 提示符运行这个命令来调试。这让我意识到我找不到逃避空格的方法(尝试了各种引用),所以不得不求助于短文件名。请注意,不需要短文件名,这只是为了转义空格。
关于windows - 在 Jenkins CI 上打开 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22602951/