Open Excel on Jenkins CI
Solution 1:
Edit:
Took a little trial and error, but this is what finally worked for me (Windows 7 64-bit).
- Download PsTools from Microsoft site
- We only need
psexec.exe
, but you can extract everything. Extract to some location accessible by Jenkins, preferably without spaces in the path. - Open elevated command prompt: type
cmd
into Start's quicksearch, right clickcmd.exe
, selectRun as Administrator
. - Type
C:\path\to\psexec.exe -accepteula
and press enter. - Type
C:\path\to\psexec.exe -i 1 cmd
and press enter. (If you see a command prompt appear, all is good, close it now) - In Job configuration, configure Execute Windows Batch command step
- Write the following:
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
is your full path topsexec.exe
, unless it is in your%path%
-
-i 1
is the session ID that you want to launch in. -
C:\PROGRA~2\MICROSO~1\path\to
is your full path toexcel.exe
without spaces. Since most Office installations are going to be under paths with spaces, like "Program Files (x86), you have to figure out the short path, or place it somewhere without spaces. - Having
excel.exe
under%path%
and working from regular command line was not enough.
A little explanation for those that care:
-
psexec
needs to install a services first. For that, it needs to be run from elevated command prompt for the first time. This is a one-time installation step. - To make
psexec
work, you need to accept the EULA prompt. This is done per session/user. So even if you runpsexec -accepteula
in your command prompt, it doesn't help when Jenkins service (running as Local System in session 0) tries to use it. Therefore, you have to place that into the Jenkins job, along with the command. Technically, it only needs to be there once, and can be removed afterwards, but it definitely doesn't hurt to keep it there. - I've used
cmd /k
and running this command from my local cmd prompt to debug. This is what made me realize I couldn't find a way to escape the spaces (tried various quoting), so had to resort to short file names. Note that short file names are not required, this is just to escape spaces.