Windows systemprofile 目录根据用户显示不同
Windows systemprofile Directory Showing Differently Based on User
上下文:
我正在尝试在 Windows Server 2012 R2 上设置 Jenkins (2.223) 构建服务器(在本例中使用 msbuild
构建)。 Jenkins 设置为服务,运行s 设置为 Local System
。
问题:
我 运行 遇到了一个问题,我可以 运行 以管理员用户身份进入 RDP 时构建脚本,但不能通过 Jenkins 运行 构建脚本。经过一些挖掘,我发现 Jenkins 没有找到具有所需构建引用 (C:\Windows\System32\config\systemprofile\.nuget\packages
) 的目录。通过更多调查,我发现目录 C:\Windows\System32\config\systemprofile
似乎不一致。
我可以通过我的管理员帐户 运行 命令 dir C:\Windows\System32\config\systemprofile
我得到:
Directory: C:\Windows\System32\config\systemprofile
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/11/2020 9:43 AM .dotnet
d---- 3/11/2020 2:27 PM .nuget
d---- 3/9/2020 1:49 PM .ssh
d---- 8/22/2013 6:36 AM AppData
-a--- 3/2/2020 3:41 PM 262144 ntuser.dat
我可以通过 Jenkins 运行 相同的命令 (dir C:\Windows\System32\config\systemprofile
),我得到:
Directory: C:\Windows\System32\config\systemprofile
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/9/2020 1:49 PM .config
d---- 3/6/2020 2:50 PM .groovy
d---- 8/22/2013 8:39 AM AppData
我需要 Jenkins 看到 ...\systemprofile\.nuget\packages\
中的引用以完成构建(Jenkins 服务通过 nuget restore
命令 运行 将引用放在那里,所以这对我来说似乎是合理的)。老实说,我不熟悉 dir
给出不同结果的概念。我怀疑 Windows 恶作剧,但我很好奇到底发生了什么 - 为什么我会根据用户 运行 的命令得到不同的结果?
附加信息:
我能够在我的本地 Windows 10 桌面上毫不费力地运行它。作为我的用户与 Jenkins 服务执行 dir
命令时,我仍然得到不同的结果,但它们恰好都有可用的 systemprofile\.nuget\packages
目录。
在 2012 服务器上,我的管理员用户的 $env:UserName 和 $env:ComputerName 分别是 Administrator
和 WIN-64VG7CF1QK3
。 Jenkin 的本地系统 $env:UserName 和 $env:ComputerName 都是 WIN-64VG7CF1QK3
.
关于我的问题的两条评论(mklement0 和 zett42)很好地回答了这个问题,使用它们我能够更好地理解并解决我的问题。
事实证明,Jenkins 确实默认安装了 32 位 JRE - 它最终默默地查看 SysWOW64
而不是 System32
(但仅在 msbuild
命令期间而不是nuget restore
命令?)。
无论如何,解决方案是按照 zett42 的建议将 Jenkins 配置为使用 64 位 JRE。 See this answer.
上下文:
我正在尝试在 Windows Server 2012 R2 上设置 Jenkins (2.223) 构建服务器(在本例中使用 msbuild
构建)。 Jenkins 设置为服务,运行s 设置为 Local System
。
问题:
我 运行 遇到了一个问题,我可以 运行 以管理员用户身份进入 RDP 时构建脚本,但不能通过 Jenkins 运行 构建脚本。经过一些挖掘,我发现 Jenkins 没有找到具有所需构建引用 (C:\Windows\System32\config\systemprofile\.nuget\packages
) 的目录。通过更多调查,我发现目录 C:\Windows\System32\config\systemprofile
似乎不一致。
我可以通过我的管理员帐户 运行 命令 dir C:\Windows\System32\config\systemprofile
我得到:
Directory: C:\Windows\System32\config\systemprofile
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/11/2020 9:43 AM .dotnet
d---- 3/11/2020 2:27 PM .nuget
d---- 3/9/2020 1:49 PM .ssh
d---- 8/22/2013 6:36 AM AppData
-a--- 3/2/2020 3:41 PM 262144 ntuser.dat
我可以通过 Jenkins 运行 相同的命令 (dir C:\Windows\System32\config\systemprofile
),我得到:
Directory: C:\Windows\System32\config\systemprofile
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/9/2020 1:49 PM .config
d---- 3/6/2020 2:50 PM .groovy
d---- 8/22/2013 8:39 AM AppData
我需要 Jenkins 看到 ...\systemprofile\.nuget\packages\
中的引用以完成构建(Jenkins 服务通过 nuget restore
命令 运行 将引用放在那里,所以这对我来说似乎是合理的)。老实说,我不熟悉 dir
给出不同结果的概念。我怀疑 Windows 恶作剧,但我很好奇到底发生了什么 - 为什么我会根据用户 运行 的命令得到不同的结果?
附加信息:
我能够在我的本地 Windows 10 桌面上毫不费力地运行它。作为我的用户与 Jenkins 服务执行
dir
命令时,我仍然得到不同的结果,但它们恰好都有可用的systemprofile\.nuget\packages
目录。在 2012 服务器上,我的管理员用户的 $env:UserName 和 $env:ComputerName 分别是
Administrator
和WIN-64VG7CF1QK3
。 Jenkin 的本地系统 $env:UserName 和 $env:ComputerName 都是WIN-64VG7CF1QK3
.
关于我的问题的两条评论(mklement0 和 zett42)很好地回答了这个问题,使用它们我能够更好地理解并解决我的问题。
事实证明,Jenkins 确实默认安装了 32 位 JRE - 它最终默默地查看 SysWOW64
而不是 System32
(但仅在 msbuild
命令期间而不是nuget restore
命令?)。
无论如何,解决方案是按照 zett42 的建议将 Jenkins 配置为使用 64 位 JRE。 See this answer.