我正在 Windows 7 上工作(作为会话 1 登录),我的 Jenkins CI 在会话 0 中作为 Windows 服务运行。
我的问题是..我想在会话 0 中通过 Jenkins CI 打开一个 Excel 文件,但想在会话 1 上显示其 GUI。
我知道会话0在Windows 7中是隔离的,但是是否可以在会话0中运行一个进程,然后在另一个会话中输出?请帮忙。
Edit:
经过一些尝试和错误,但这最终对我有用(Windows 7 64 位)。
- 下载PsTools来自微软网站
- 我们只需要
psexec.exe
,但你可以提取所有内容。提取到 Jenkins 可访问的某个位置,最好路径中没有空格。
- 打开提升的命令提示符:键入
cmd
进入开始的快速搜索,右键单击cmd.exe
, 选择Run as Administrator
.
- Type
C:\path\to\psexec.exe -accepteula
并按回车键。
- Type
C:\path\to\psexec.exe -i 1 cmd
并按回车键。 (如果您看到出现命令提示符,则一切正常,立即关闭它)
- 在作业配置中,配置执行Windows批处理命令 step
- 写下以下内容:
C:\path\to\psexec.exe -accepteula && C:\path\to\psexec.exe -i 1 cmd /c start C:\PROGRA~2\MICROSO~1\path\to\excel.exe
Where:
-
C:\path\to
是你的完整路径psexec.exe
,除非它在你的%path%
-
-i 1
是您要启动的会话 ID。
-
C:\PROGRA~2\MICROSO~1\path\to
是你的完整路径excel.exe
没有空格。由于大多数 Office 安装将位于带有空格的路径下,例如“Program Files (x86)”,因此您必须找出短路径,或者将其放置在没有空格的位置。
- Having
excel.exe
under %path%
并从常规命令行工作还不够.
给关心的人一点解释:
-
psexec
需要先安装一个服务。为此,第一次需要从提升的命令提示符运行它。这是一次性安装步骤。
- To make
psexec
工作时,您需要接受 EULA 提示。这是针对每个会话/用户完成的。所以即使你跑psexec -accepteula
在命令提示符中,当 Jenkins 服务(在会话 0 中作为本地系统运行)尝试使用它时,它没有帮助。因此,您必须将其与命令一起放入 Jenkins 作业中。从技术上讲,它只需要存在一次,之后就可以删除,但保留它绝对没有坏处。
- 我用过
cmd /k
并从本地命令提示符运行此命令进行调试。这让我意识到我无法找到一种方法来转义空格(尝试了各种引用),因此不得不求助于短文件名。请注意,短文件名不是必需的,这只是为了转义空格。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)