10 มีนาคม 2553

[042] User-Defined Service (WindowsNT) ทำโปรแกรมอะไรก็ได้ให้เป็น Windows Service

เรื่องมันมีอยู่ว่า หลังจากที่เว็บระบบ KM เสร็จแล้วมีการเพิ่มระบบ update เอกสารแบบ online ประเด็นก็คือ เวลาที่จะให้ update เนี่ย ตัว code มันไปผูกกับ client ทั้งหมด คือ ต้องเรียกโปรแกรมผ่านหน้าเว็บแล้วก็รอจนกว่ามันจะ update เสร็จจึงปิด คราวนี้ด้วยความขี้เกียจ ไม่ว่าจะไฟล์เล็กไฟล์ใหญ่ ก็ใช้วิธีนี้หมด ซึ่งก็สะดวกในการพัฒนาดี (ใช้เวลาน้อยมากๆ วันเดียวเสร็จ)


 ปัญหาเริ่มเกิดขึ้นเมื่อ client ของคนที่ทำงานจริงๆ มันดันไม่สามารถทำงานได้ถูกต้องเนื่องจาก
  1. ระบบ LAN ที่เชื่อมต่อระหว่างสาขาดันมีปัญหา (ถึงจะนานๆครั้งก็เถอะ)
  2. เบราเซอร์ที่ใช้งานดันไม่สามารถทำงานได้ถูกต้อง (JavaScript) 
คราวนี้จะต้องตามไปแก้หรือตอบปัญหาทุกครั้งก็ใช่ที่ ก็เลยยอมเสียเวลาทำมันซะ เผื่อว่าตัว KM จะได้ใช้ระบบนี้ด้วย ในการออกแบบตอนแรกใช้  win32service Functions ใน PHP5 ซึ่งผลออกมาแล้วมีปัญหาที่พยายามแก้ไขแล้วก็ไม่ผ่าน  สุดท้ายเลยใช้โปรแกรม SRVANY โปรแกรมขนาดเล็ก (ไม่ถึง 100kb)  ที่ช่วยเรียกโปรแกรมใดๆ ก็ได้ขึ้นมาทำงานในแบบ WindowsNT Service

ใช้เวลา 2-3 ชม. ในการแก้ไขโปรแกรมเก่าให้ทำงานแบบ Service ซึ่งจะมีปัญหาเล็กน้อยคือ มันไม่มีหน้าจอให้แสดงผลการทำงาน เลยต้องย้ายไปเก็บลง Database แทน นอกนั้นก็ไ่ม่มีปัญหาอะไร

หลังจากที่ทำงานกลายเป็นว่าโปรแกรม php.exe กินหน่วยความจำไปเกือบ 16MB เมื่อไม่ทำงานก็ไม่กิน CPU แต่อย่างใด (อยู่นิ่งๆ ด้วยคำสั่ง sleep)

 สำหรับข้อเสียของวิธีนี้ก็คงไม่พ้นการเขียนโปรแกรมเพื่อตรวจสอบสถานของ Service ได้

เกี่ยวกับเจ้าของบล๊อก

รูปภาพของฉัน

เป็นโปรแกรมเมอร์ที่ฝันว่าจะได้นอนเกาพุงไปวัน ๆ จนพุงลดกลายเป็นเอว ได้เป็นบุคคลที่มีความสุขที่สุดในโลกจนคนอื่น ๆ อิจฉา