ลองใช้ Locale Emulator สำหรับ App เก่าๆที่ต้องการ Locale เป็นพิเศษ

จาก Blog ตอนที่แล้วที่จะว่าตัว Sun One มัน Required Specific Locale ทำให้ dotnet build เจอ Error MSB3554 เลยต้องหาทางแก้กัน เพราะ ผบห ไม่ให้งบ Resource เพิ่มและ ให้เอามาฝาก Agent ที่ผมดูแลแบบงงๆ

Solution ที่เป็นไปได้

  • แยก user และกำหนด Profile สำหรับ Run ไปเลย ตอนใช้งานให้ Run As User ไปแทน
  • ลองใช้งานตัว Locale Remulator สร้าง ENV ปลอมๆสำหรับให้ Sun One ใช้งานตอน Run เท่านั้นครับ

หลังจากถกกันสรุปจะไม่เพิ่ม User แนวทางเลยมาเป็นการใช้ Locale Emulator แทนครับ

Locale Emulator / Locale Remulator คือ อะไร

เป็น Utility เล็กๆ ที่ช่วยจำลอง Environment ขึ้นมา เพราะตัว App

  • อาจจะ Lock ประเทศไม่ให้เปิด เหมือนยุคนึงจะใช้วิธีนี้กันของเถื่อน
  • หรือ ต้องการให้ Set ENV ตามประเทศนั้น เพื่อการแสดงภาษาที่สมบูรณ์ครับ เช่น พวกภาษาจีน และ ญี่ปุ่น (จริง สมัยนี้ Windows ยุคใหม่น่าจะทำได้หมดแล้ว)

ดังนั้น เพื่อแก้ปัญหานี้ทาง Microsoft ได้ทำ App Microsoft AppLocale แต่หยุดพัฒนาไป 10 กว่าปีแล้วครับ ทีนี่มีชุมชน Open Source พัฒนาขึ้นมามาต่อครับ โดยตอนแรกจะเป็นตัว

  • Locale Emulator - รองรับเฉพาะ App 32 bits แต่ได้หยุดพัฒนาไปตอนปี 2022
  • Locale Remulator - อันนี้เค้า Fork จาก Locale Emulator มาปรับปรุง และรองรับ App 64 bits เพิ่มเติมด้วยครับ

ทางผมเลยจะเลือกใช้ตัวนี้มาแก้ปัญหาเรื่อง Sun One เพราะถ้าแก้ได้ เดี๋ยวผูก Jenkins ต่อได้

การใช้งาน Locale Remulator

- ติดตั้ง Locale Remulator
  1. Download จาก https://github.com/InWILL/Locale_Remulator + ส่งให้ Scan Virus ให้เรียบร้อย
  2. แตก Zip และกำหนด Path ให้ชัดเจน Path นี้ห้ามลบเด็ดขาด ของผมจะกำหนดอยู่ใน Path D:\Software\Locale_Remulator.1.6.0
  3. เข้าไปที่ติดตั้ง ดับเบิ๊ลคลิก LRInstaller.exe ด้วยสิทธิ Administrator และกด Install
- กำหนด Profile ใน Locale Remulator

ที่ Path ติดตั้ง ดับเบิ๊ลคลิก LREditor.exe ด้วยสิทธิ Administrator จากนั้นทำการกำหนดค่าตาม Step ดังรูป

  1. CodePage Setting - Thai (Thailand)
  2. TimeZone Setting - (UTC+07:00) Bangkok, Hanoi, Jakarta
  3. ตรง Advance Setting ให้เลือก
    - Run As Administrator
    - Hook Input Method Editor
    - Fake System UI Language
  4. จากนั้นกด Save As โดยกำหนดชื่อ Run In Thai(Admin) และกด Save จากนั้นปิดโปรแกรม LREditor.exe

ข้อมูลทั้งหมดจะอยู่ในไฟล์ LRConfig.xml โดยจำ Guid ไว้นะครับ

- ตรวจสอบก่อน Path ของ exe ที่มีปัญหาอยู่ที่ไหน

ดูก่อนว่า Path ที่ตัว Sun One เรียกใช้งานจริงๆ อยู่ที่ไหน โดยคลิกขวาที่ Shortcut ดูที่ Property Target ปกติอยู่ที่

- Target "C:\Program Files\s1studio\ee\bin\runidew.exe"

จริงตอนนี้เราสามารถคลิกขวา shortcut หรือ ตัว exe เพื่อให้ Local Remulator มันมาจำลอง Windows ENV แล้วเปิด App ได้แล้วครับ

- ทำ Shortcut อันใหม่ เพื่อความสะดวกในการใช้งาน

ทำ ShortCut อันใหม่ โดยใช้ LREditor.exe ด้วยสิทธิ Administrator และทำการกำหนดค่า ดังนี้

  1. Drop Down เลือก Run In Thai(Admin)
  2. กด Shortcut มันจะขึ้น popup ให้เราไปหา exe ที่ Run Program ไหน ในที่นี้ C:\Program Files\s1studio\ee\bin เลือกไฟล์ runidew.exe

ในที่นี้จะอยู่ใน C:\Program Files\s1studio\ee\bin ลอง Edit ขึ้นมาดูครับ เนื่องจาก Program ตัวนี้มี Bug เล็กน้อย ตอนสร้าง Shortcut มันจะกำหนด path ไปหา exe ที่เราต้องการ ในทีนี้ runidew.exe ไม่ครบต้องมาแก้มือ ให้คลิกขวาที่ Shortcut และตรง Target ในช่วงท้ายๆให้ไปแก้ Path ของ exe เราให้ถูก

  • ตัวอย่างที่ผิด
D:\Software\Locale_Remulator.1.6.0\LRProc.exe 29e1b017-88dc-4857-a78b-da5822009950 C:\Program
  • ตัวอย่างที่ถูก
D:\Software\Locale_Remulator.1.6.0\LRProc.exe 29e1b017-88dc-4857-a78b-da5822009950 C:\Program Files\s1studio\ee\bin\runidew.exe

ลองใช้งาน เราเปิด Sun One ขึ้นแล้วครับ

จากเรื่อง Shortcut ตอนนี้เรารู้แล้ว ถ้าจะไปให้ Call Jenkins จะเรียกยังไง

[PATH_TO/LRProc.exe] [GUID_IN_LRConfig.xml] [PATH_TO_YOUR_DESIRE_EXE]

ที่เหลือก็ให้ไปศึกษา exe ของ sun one ว่ามี param ยังไง แล้ว build pipeline ระหว่างทำระบบใหม่ขึ้นมาครับ

ถ้ามีการขยับ Version ก่อนจะลง Version ใหม่ ให้ Run LRInstaller.exe ด้วยสิทธิ Administrator และกด Uninstall + Restart สักรอบก่อนลง Ver ใหม่


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.