เท่าที่ลองหาข้อมูลดู น่าจะเป็นจาก สิทธิของ Windows น่ะค่ะ คือ อย่างนี้ค่ะ
สมมติว่า เราเขียน เว็บ สั่งพิมพ์ผ่าน Form Report มันจะเรียกคำสั่ง Preview Dialog ออกมาก่อนใช้ไหมคะ นั่นแหละเป็นเรียกสิทธิ Windows มันก็จะอนุมัติ ให้เลย แต่ถ้าเราให้มันสั่งพิมพ์โดยการเรียกผ่าน Driver หรือ Tcp/ip เลย มันจะไม่ยอมค่ะ ถือว่าเป็นการเรียกผ่านสิทธิ Admin ของ Windows (ไม่ได้ขอสิทธิก่อน)
ดังนั้นเราลองสังเกตดูว่า ถ้าเราเขียน App Windows ขึ้นมาตัวนึง เวลาที่เราเปิด App มันจะเรียก Run as administrator ใช่ไหมคะ (เฉพาะ Windows 8 ขึ้นไป) นั่นแหละค่ะ เป็นการเปิดสิทธิ ให้ App เรากับ Windows สามารถทำงานได้เต็มความสามารถ (ตามโค้ดที่เราเขียน)
ที่นี่วิธีแก้ของเราก็คือ (โปรแกรมของเราต้องการสั่งพิมพ์เลย ไม่ผ่าน Form Report) เราทำการ Test ก่อนค่ะ ว่าเป็นที่ สิทธิจริงๆใช่หรือไม่ โดยการเปิด Visual Studio แบบ Click ขวา แล้ว Run as administrator ก็ปรากฏว่าผ่านค่ะ
แล้วพอเราเอาไปไว้ที่ Web Server ปรากฏว่าไม่ผ่าน ติด Access ...... ก็แสดงว่าใช่
วิธีแก้มี 2 วิธี คือไป Set สิทธิให้กับ Web Server (IIS) แต่มันค่อนข้างยุ่งยาก (คือลองแล้วไม่ได้ หรือ เซ็ตไม่เป็นก็ไม่รู้ 555) เราก็ใช้ วิธีที่ 2 คือ เขียน App Console ขึ้นมาตัวนึง (หรือ App Windows ก็ได้) แล้วให้มันไปเปิด Service ให้ค่ะ
วิธีนี้มันจะยุ่งยากหน่อยคือ ทุกครั้งที่เปิดเครื่อง เราต้องมาเปิด App ตัวนี้ก่อน แต่ User บอกว่า ไม่เป็นไร เพราะไม่ได้ยุ่งยากอะไร อ๋อ แล้วก็อย่าลืมเวลาเปิด App บน windows ให้ Run as administrator ด้วย ไม่งั้นมันจะ Error เปิด Service ไม่ผ่านน่ะคะ