windows - 如果没有桌面 session ,devenv.com 将无法启动

标签 windows jenkins visual-studio-2015 continuous-integration

我正在为 Windows 10 应用程序设置 Jenkins 作业。 我需要使用 devenv.com 可执行文件编译解决方案中的四个项目之一,因为它是一个扩展名为 .vdproj 的项目(安装项目)。 其他项目使用 MSBuild 成功构建,没有任何问题。

当我以 root 身份登录到 Jenkins 目标节点时,Jenkins 作业成功结束,但是当我从 Jenkins 运行作业并且我没有登录时失败。

需要您的帮助或变通方法来解决问题。

PS:我们使用 ant 作为任务运行器,我们有一个启动构建过程的特定任务。

编辑 26/01/2017

我想向您提供其他信息,例如错误消息和我之前跳过的一个步骤。

错误消息提供了指向 Microsoft Page 的链接并报告配置问题。

由此解决 StackOverflow帖子,我在下面添加了一个新的 DWORD 注册表项

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MSBuild\EnableOutOfProcBuild

问题是用户未登录时无法读取此值吗?

编辑 27/01/2017

我快被这个问题搞疯了。

devenv/? 命令在我本地运行时工作正常,但当我从 Jenkins 运行它时无法正常工作,并出现与以前相同的错误:Microsoft Visual Studio 发现配置问题。要修复它,请以管理员身份重新启动或访问 http://go.microsoft.com/fwlink/?LinkId=659046了解更多信息。

所以 devenv.com 在我未登录时无法执行??

2017 年 1 月 31 日更新#

这是我的 .bat 文件,由 ant build.xml 从目标调用

call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"

@set MSBUILD="C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe"

%MSBUILD%  "%cd%\src\AutomatedSetupBuild.proj"

pause

AutomatedSetupBuild.proj 是一个 MSBuild 脚本

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

<Target Name="Build">
  <PropertyGroup>
        <DevEnv>C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.com</DevEnv>
        <SolutionFile>$(MSBuildProjectDirectory)\MySolution.sln</SolutionFile>
        <ProjectFile>MySetupProject\MySetupProject.vdproj</ProjectFile>
        <Configuration>Release</Configuration>
</PropertyGroup>
    
<Exec
      Command="&quot;$(DevEnv)&quot; &quot;$(SolutionFile)&quot; /Rebuild &quot;$(Configuration)&quot; /Project &quot;$(ProjectFile)&quot; /ProjectConfig &quot;$(Configuration)&quot; /Log vs.log /useenv"
      ContinueOnError="false"
     IgnoreExitCode="false"
     WorkingDirectory="$(MSBuildProjectDirectory)" />
 </Target>
</Project>

如您所见,我在运行 devenv.com 之前加载了环境变量,但我收到了同样的错误。

最佳答案

您是使用自由风格的工作还是使用 Jenkinsfile 进行管道项目?无论如何,要使 devenv.com 正常工作,必须设置环境变量。

请转到 Windows 开始菜单并查找类似 Visual Studio XX -> Visual Studio 工具 -> VS20XX 开发人员命令提示的内容。按鼠标右键并选择属性。在那里寻找目标。在我的例子中,该字段包含以下字符串:

%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat""

如果您使用例如一个 Jenkinsfile,更改对 devnenv.com 的调用,它可能看起来像

bat "devenv.com my_solution_file.sln /project my_project /build  \"Release|x64\""

bat "call \"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat\"; devenv.com my_solution_file.sln /project my_project /build  \"Release|x64\""

重要的是,对 VsDevCmd.bat 的调用在同一个 bat 命令中。否则环境变量设置会丢失,并且不会被第二次调用 bat 看到。

关于windows - 如果没有桌面 session ,devenv.com 将无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41853739/

相关文章:

c++ - 如何在Windows上获取可用的RAM?

windows - R自定义包从文件错误安装

windows - Go - 如何检测 Windows 或 Mac 桌面屏幕是横向还是纵向模式?

Jenkins 挂断: Please wait while Jenkins is getting ready to work

python:如何枚举本地Windows组成员

php - Docker Composer 命令在安装 Composer 依赖项期间失败

c# - Roslyn CodeFixProvider 给出 VS 2015 错误

c++ - 警告 C5029 是否仅指示正在使用 Microsoft 扩展?

c++ - 自定义预编译头导致编译错误

jenkins - 如何捕获 Jenkins 中的任何管道错误?