ไดเรกทอรีโปรไฟล์ระบบ Windows แสดงแตกต่างกันตามผู้ใช้

บริบท:

ฉันกำลังพยายามตั้งค่าเซิร์ฟเวอร์บิลด์ Jenkins (2.223) (บิลด์โดยใช้ msbuild ในกรณีนี้) บน Windows Server 2012 R2 Jenkins ได้รับการตั้งค่าเป็นบริการและทำงานเป็น Local System

ปัญหา:

ฉันประสบปัญหาในการเรียกใช้สคริปต์บิลด์เมื่อ RDP เข้าสู่ระบบในฐานะผู้ใช้ผู้ดูแลระบบ แต่ไม่สามารถเรียกใช้สคริปต์เดียวกันผ่าน 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

ฉันสามารถรันคำสั่งเดียวกัน (dir C:\Windows\System32\config\systemprofile) ผ่าน Jenkins และฉันได้รับ:

    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

ฉันต้องการการอ้างอิงภายใน ...\systemprofile\.nuget\packages\ เพื่อให้เจนกินส์เห็นเพื่อสร้างงานให้เสร็จสมบูรณ์ (การอ้างอิงถูกวางไว้ที่นั่นโดยคำสั่ง nuget restore ที่ทำงานโดยบริการเจนกินส์ ดังนั้นสิ่งนี้จึงดูสมเหตุสมผลสำหรับฉัน) พูดตามตรง ฉันไม่คุ้นเคยกับแนวคิดของ dir ที่ให้ผลลัพธ์ที่แตกต่างออกไป ฉันสงสัยว่า Windows shenanigans แต่ฉันสงสัยว่าเกิดอะไรขึ้น - เหตุใดฉันจึงได้รับผลลัพธ์ที่แตกต่างกันตามผู้ใช้ที่รันคำสั่ง

ข้อมูลเพิ่มเติม:

  • ฉันสามารถทำให้สิ่งนี้ใช้งานได้บนเดสก์ท็อป Windows 10 ในพื้นที่ของฉันโดยไม่ต้องยุ่งยากใดๆ ฉันยังคงได้รับผลลัพธ์ที่แตกต่างกันเมื่อดำเนินการคำสั่ง dir ในฐานะผู้ใช้ของฉันเทียบกับบริการ Jenkins แต่ทั้งสองมีไดเรกทอรี systemprofile\.nuget\packages ที่พร้อมใช้งาน

  • บนเซิร์ฟเวอร์ 2012 $env:UserName และ $env:ComputerName ของผู้ใช้ผู้ดูแลระบบของฉันคือ Administrator และ WIN-64VG7CF1QK3 ตามลำดับ ระบบภายในเครื่องของ Jenkin $env:UserName และ $env:ComputerName มีทั้ง WIN-64VG7CF1QK3


person axbin    schedule 12.03.2020    source แหล่งที่มา
comment
อาการแสดงว่ากระบวนการหนึ่งเป็นกระบวนการ 64 บิต และอีกกระบวนการหนึ่งเป็น 32 บิต กระบวนการดังกล่าวเห็นไดเร็กทอรีที่แตกต่างกันเป็น C:\Windows\System32 แม้ว่าคุณจะสามารถเข้าถึงไดเร็กทอรีอื่นตามลำดับในทางเทคนิคเป็น C:\Windows\SysWOW64 (dir 32 บิตจากกระบวนการ 64 บิต) และ C:\Windows\SysNative (dir 64 บิตจากกระบวนการ 32 บิต)   -  person mklement0    schedule 12.03.2020
comment
ฉันแนะนำให้แทนที่รันไทม์ Java 32 บิตเริ่มต้นของเวอร์ชัน Jenkins Windows เป็น 64 บิตเพื่อหลีกเลี่ยงความยุ่งยากเหล่านี้ ดูคำตอบนี้   -  person zett42    schedule 12.03.2020
comment
@ zett42 - ขอบคุณทั้งสองคน! ข้อมูลที่เป็นประโยชน์มาก ฉันจะลงคะแนนความคิดเห็นของคุณ แต่ฉันก็ยังมีสิทธิ์นั้น   -  person axbin    schedule 13.03.2020


คำตอบ (1)


ความคิดเห็นสองข้อในคำถามของฉัน (mklement0 และ zett42) ตอบคำถามนี้ได้ค่อนข้างดี และเมื่อใช้ความคิดเห็นเหล่านั้น ฉันก็สามารถเข้าใจและแก้ไขปัญหาของฉันได้ดีขึ้น

ปรากฎว่าเจนกินส์ติดตั้ง JRE 32 บิตตามค่าเริ่มต้น ซึ่งจบลงด้วยการดู SysWOW64 แทน System32 อย่างเงียบ ๆ (แต่เฉพาะในระหว่างคำสั่ง msbuild ไม่ใช่คำสั่ง nuget restore)

อย่างไรก็ตาม วิธีแก้ไขคือกำหนดค่า Jenkins ให้ใช้ JRE 64 บิตตามที่ zett42 แนะนำ ดูคำตอบนี้< /ก>.

person axbin    schedule 13.03.2020