Direktori profil sistem Windows Ditampilkan Berbeda Berdasarkan Pengguna

Konteks:

Saya mencoba menyiapkan server build Jenkins (2.223) (dalam hal ini build menggunakan msbuild) di Windows Server 2012 R2. Jenkins diatur sebagai layanan dan dijalankan sebagai Local System.

Masalah:

Saya mengalami masalah di mana saya dapat menjalankan skrip build ketika RDP digunakan sebagai pengguna Administrator, tetapi tidak dapat menjalankan skrip yang sama melalui Jenkins. Setelah menggali beberapa kali, saya menemukan bahwa direktori dengan referensi build yang diperlukan (C:\Windows\System32\config\systemprofile\.nuget\packages) tidak ditemukan oleh Jenkins. Dengan sedikit penyelidikan lebih lanjut, saya menemukan bahwa direktori C:\Windows\System32\config\systemprofile tampaknya tidak konsisten.

Saya dapat menjalankan perintah dir C:\Windows\System32\config\systemprofile melalui akun Administrator saya dan saya mendapatkan:

     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

Saya dapat menjalankan perintah yang sama (dir C:\Windows\System32\config\systemprofile) melalui Jenkins, dan saya mendapatkan:

    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

Saya memerlukan referensi dalam ...\systemprofile\.nuget\packages\ untuk dilihat oleh Jenkins untuk menyelesaikan pembangunan (referensi diletakkan di sana dengan perintah nuget restore yang dijalankan oleh layanan Jenkins, jadi ini tampaknya masuk akal bagi saya). Dan sejujurnya saya belum familiar dengan konsep dir yang memberikan hasil berbeda. Saya menduga Windows melakukan kejahatan, tetapi saya ingin tahu apa yang sebenarnya terjadi - mengapa saya mendapatkan hasil yang berbeda berdasarkan pengguna yang menjalankan perintah?

Info Tambahan:

  • Saya bisa menjalankan ini di desktop Windows 10 lokal saya tanpa kesulitan. Saya masih mendapatkan hasil yang berbeda ketika menjalankan perintah dir sebagai pengguna saya versus layanan Jenkins, tetapi keduanya memiliki direktori systemprofile\.nuget\packages yang tersedia.

  • Di server 2012, $env:UserName dan $env:ComputerName pengguna Admin saya masing-masing adalah Administrator dan WIN-64VG7CF1QK3. Sistem lokal Jenkin $env:UserName dan $env:ComputerName keduanya WIN-64VG7CF1QK3.


person axbin    schedule 12.03.2020    source sumber
comment
Gejalanya menunjukkan bahwa satu proses adalah proses 64-bit dan proses lainnya adalah proses 32-bit. Proses tersebut melihat direktori berbeda sebagai C:\Windows\System32, meskipun secara teknis Anda dapat mengakses direktori lainnya sebagai C:\Windows\SysWOW64 (dir. 32-bit dari proses 64-bit) dan C:\Windows\SysNative (dir. 64-bit dari proses 32-bit).   -  person mklement0    schedule 12.03.2020
comment
Saya sarankan untuk mengganti runtime Java 32-bit default dari Jenkins Windows versi dengan versi 64-bit untuk menghindari kerepotan ini. Lihat jawaban ini.   -  person zett42    schedule 12.03.2020
comment
@ zett42 - terima kasih kalian berdua! Informasi yang sangat membantu. Saya akan memberi suara positif pada komentar Anda, namun saya masih mempunyai hak istimewa itu.   -  person axbin    schedule 13.03.2020


Jawaban (1)


Dua komentar pada pertanyaan saya (mklement0 dan zett42) menjawab pertanyaan ini dengan cukup baik, dan dengan menggunakannya saya dapat lebih memahami dan menyelesaikan masalah saya.

Ternyata Jenkins menginstal JRE 32-bit secara default - yang akhirnya diam-diam melihat SysWOW64 alih-alih System32 (tetapi hanya selama perintah msbuild dan bukan perintah nuget restore?).

Bagaimanapun, solusinya adalah mengkonfigurasi Jenkins untuk menggunakan JRE 64-bit seperti yang disarankan oleh zett42. Lihat jawaban ini.

person axbin    schedule 13.03.2020