เริ่มโปรแกรมเมื่อเริ่มต้นคอมพิวเตอร์เมื่อไม่มีใครเข้าสู่ระบบและแสดงหน้าต่างเมื่อมีคนเข้าสู่ระบบ (OS: Windows)


19

ฉันมีโปรแกรมที่เปิดใช้เมื่อเริ่มต้นระบบโดยใช้ Task Scheduler บน Windows Server 2012 โปรแกรมจะต้องเริ่มต้นแม้ว่าคอมพิวเตอร์จะรีบูตโดยอัตโนมัติ

ผู้ดูแลระบบเป็นบัญชีที่ใช้ในการเริ่มโปรแกรมตัวเลือก "เรียกใช้ว่าผู้ใช้เข้าสู่ระบบหรือไม่" ถูกตรวจสอบสำหรับงาน

ปัญหานี้คือเมื่อบางคนเข้าสู่ระบบในฐานะผู้ดูแลระบบโดยใช้การเชื่อมต่อเดสก์ท็อประยะไกลในที่สุดอินเทอร์เฟซ (หน้าต่างโปรแกรม) จะถูกซ่อนไว้

อย่างที่ฉันเข้าใจไม่มีวิธีแก้ไขโดยใช้ Task Scheduler

ฉันจะแก้ปัญหานี้ได้อย่างไร

มันควรจะเป็นปัญหาที่พบบ่อย แต่ฉันไม่สามารถหาอะไรได้โดยการค้นหาจากเน็ต ฉันประหลาดใจมากที่ Microsoft อนุญาตให้มีข้อ จำกัด เช่นนี้ในกำหนดการของพวกเขา ฉันสามารถสร้าง VBScript หรือสิ่งที่ทำงานเมื่อเริ่มต้นและเปิดโปรแกรมซึ่งจะปรากฏให้เห็นเมื่อผู้ใช้เข้าสู่ระบบจริงหรือไม่

ความคิดอื่น ๆ ?

(ฉันไม่ต้องการให้แยกโปรแกรมเฉพาะ GUI ที่เชื่อมต่อกับโปรแกรมดั้งเดิมโดยวิธีฉันต้องการมันถ้าฉันไม่ต้องยกเลิกโปรแกรมที่ทำงานอยู่แล้วเมื่อเข้าสู่ระบบของผู้ใช้แล้วเปิด มันอีกครั้ง.)


2
Firedaemon ติดตั้งแอปเป็นบริการเมื่อ RDPed เปลี่ยนเป็น "เซสชัน 0" โดยใช้ Firedaemon ดูแอพ
TheCleaner

เทคนิคนี้สามารถทำได้ถ้าคุณพัฒนาบริการของคุณเอง
Ryan Ries

1
เพิ่งตอบคำถามของฉันเอง ฉันไม่สามารถยอมรับคำตอบของฉันเองได้เป็นเวลาสองวันเพราะระบบที่นี่ที่ serverfault.com นั้นแย่มาก (ตอนนี้คนส่วนใหญ่จะละทิ้งหน้านี้โดยไม่ต้องรอสองวันและปล่อยให้คำถามถูกทำเครื่องหมายว่ายังไม่ได้แก้ไข)
มาร์คัส

2
@Marcus: ข้อ จำกัด เกี่ยวกับผู้ที่สามารถทำอะไรและเมื่อใดที่ตั้งใจจะหยุดการละเมิด น่าเสียดายที่บางครั้งพวกเขาทำให้เกิดความไม่สะดวกสำหรับความพยายามที่แท้จริงในการทำสิ่งที่ถูกต้อง แต่บางครั้งต้องมีการประนีประนอม หากคุณมีข้อเสนอแนะที่อาจปรับปรุงสถานการณ์ให้ดีขึ้น (ปกป้องไซต์อย่างน้อยก็เช่นกัน แต่ทำให้ผู้ใช้ของแท้ไม่สะดวก) มันจะเป็นการดีกว่าถ้าคุณคิดขึ้นผ่านไซต์ "meta" ที่เกี่ยวข้อง ( meta.serverfault.com , meta stackoverflow.com ) แทนที่จะบ่นในความคิดเห็นว่านักวิ่งไซต์นั้นไม่ค่อยเห็น
David Spillett

ดังที่คุณเห็นได้จากการลงคะแนนคำตอบที่คุณต้องการยอมรับไม่ใช่คำตอบที่ผู้คนยอมรับเพราะวิธีที่คุณพยายามทำสิ่งนี้เป็นสิ่งที่ผิดตั้งแต่เริ่มต้น
JamesRyan

คำตอบ:


28

คิดออกว่าจะทำมันเอง มันค่อนข้างจะเป็นการแก้ปัญหา แต่นั่นคือสิ่งที่ฉันคาดว่าจะได้รับ

หยุด! อย่าเพิ่งประจบประแจง อ่านต่อ...

  • เรียกใช้ตั้งค่าเพื่อให้ผู้ดูแลระบบควรเข้าสู่ระบบโดยอัตโนมัติ

  • สร้างงานใน Task Scheduler ตั้งค่าให้ทำงานเฉพาะเมื่อผู้ใช้ (ผู้ดูแลระบบ) เข้าสู่ระบบ ทริกเกอร์คือ "เมื่อเข้าสู่ระบบ" และระบุว่าจะเป็นเมื่อผู้ดูแลระบบเข้าสู่ระบบเท่านั้น

  • สร้างงานที่สอง ทำงานเฉพาะเมื่อผู้ใช้เข้าสู่ระบบทริกเกอร์เมื่อผู้ดูแลระบบเข้าสู่ระบบ การดำเนินการควรเป็น "เริ่มโปรแกรม" และโปรแกรมคือ "C: \ Windows \ System32 \ rundll32.exe" โดยมีการตั้งค่าฟิลด์อาร์กิวเมนต์เป็น "user32.dll, LockWorkStation"

จะเกิดอะไรขึ้นถ้าคุณรีสตาร์ทคอมพิวเตอร์คือผู้ดูแลระบบเข้าสู่ระบบโดยอัตโนมัติโปรแกรมที่คุณต้องการเริ่มต้นจะเริ่มทำงานและสถานีงานจะถูกล็อค ถ้าฉันเข้าสู่ระบบผ่านการเชื่อมต่อเดสก์ท็อประยะไกลฉันสามารถดูหน้าต่างโปรแกรมและใช้ GUI ฉันสามารถล็อค / ปลดล็อกคอมพิวเตอร์ได้โดยไม่มีปัญหาและยกเลิกการเชื่อมต่อ / เชื่อมต่อใหม่ตามที่ฉันต้องการ ไม่มีปัญหาหากฉันไปที่เซิร์ฟเวอร์และเข้าสู่ระบบที่เวิร์กสเตชันจริง เนื่องจากผู้ดูแลระบบได้ลงชื่อเข้าใช้งานแล้วจะไม่ทำงานอีกครั้ง (มันไม่ได้สร้างการเข้าสู่ระบบล็อคอินไม่สิ้นสุดบางอย่างที่คุณไม่สามารถแยกออกจากกัน)

เรียบง่ายเหมือนที่ ได้รับมีช่วงเวลาหนึ่งวินาทีก่อนที่คอมพิวเตอร์จะถูกล็อคหลังจากการเข้าสู่ระบบอัตโนมัติและฉันเดาว่าแฮ็กเกอร์มืออาชีพที่มีการเข้าถึงทางกายภาพกับคอมพิวเตอร์สามารถทำอะไรบางอย่างลับๆล่อๆในช่วงเวลานี้ แต่ในกรณีของฉัน ตราบใดที่ฉันไม่ปล่อยให้แฮ็กเกอร์มืออาชีพเข้ามาในบ้านของฉันและแสดงให้พวกเขาเห็นว่าระบบคอมพิวเตอร์นั้นค่อนข้างปลอดภัย เหนือสิ่งอื่นใดมีค่าไม่มากนักในคอมพิวเตอร์ที่ต้องการการป้องกัน super-vault ดังนั้นฉันจึงค่อนข้างพอใจกับโซลูชันนี้


7
มาร์คัสไม่มีการดูหมิ่น (หรือลงคะแนน) แต่ถ้านี้เป็นจริงชนิดของคำตอบที่คุณกำลังมองหาคำถามนี้จะได้รับเหมาะสมสำหรับSuperUser
Ryan Bolger

2
การตัดสินใจว่าการแลกเปลี่ยนสแต็กเพื่อโพสต์นี้ไม่ใช่เรื่องง่าย
มาร์คัส

สวัสดี Marcus ฉันทำตามคำตอบของคุณแล้ว แต่ฉันมีปัญหาในการเปิดโปรแกรมสองโปรแกรมด้วย GUI แทนที่จะเป็นเพียงโปรแกรมเดียว SuperUserผมได้โพสต์คำถามใน หากคุณสามารถตอบคำถามได้นั่นจะเป็นความช่วยเหลือที่ยอดเยี่ยม - superuser.com/questions/902386/…
user2162550

1
จริง ๆ แล้วการ downvoting นั้นเช่นกันเพราะมันไม่ใช่คำตอบสำหรับคำถาม คำถามนี้ระบุอย่างชัดเจนว่าตอนเที่ยงกำลังเข้าสู่ระบบ - และ "วิธีแก้ปัญหา" ของคุณที่นี่ทำให้เข้าสู่ระบบอัตโนมัติ (ดังนั้นใครบางคนเข้าสู่ระบบ) อาจไม่ได้เป็นสมาร์ท fomulation ในคำถาม แต่คำถามเป็นอย่างที่มันเป็น
TomTom

1
@TomTom ในฐานะตัวเลือกที่นำเสนอให้กับผู้ใช้ปลายทาง "เรียกใช้ว่าผู้ใช้เข้าสู่ระบบหรือไม่" อาจหมายถึง "คุณไม่จำเป็นต้องอยู่ที่นี่เพื่อดูแลเพื่อให้แน่ใจว่าจะเริ่มต้น"
Aryeh Leib Taurog

16

ฉันมีโปรแกรมที่เปิดใช้เมื่อเริ่มต้นระบบโดยใช้ Task Scheduler บน Windows Server 2012 โปรแกรมจะต้องเริ่มต้นแม้ว่าคอมพิวเตอร์จะรีบูตโดยอัตโนมัติ

ถ้าเช่นนั้นทำไมคุณไม่ทำให้บริการเป็นระบบตามที่หน้าต่างกำหนด

ฉันจะแก้ปัญหานี้ได้อย่างไร

คุณไม่สามารถ. โปรแกรมพื้นหลังไม่ควรโต้ตอบกับ UI หรือ: UI ควรเรียกใช้โปรแกรมของตัวเองที่เชื่อมต่อกับบริการ UI ที่ทำงานในพื้นที่ผู้ใช้ของผู้ใช้ที่เข้าสู่ระบบทำการนำเสนอบริการ windows ทำการประมวลผล นี่คือรูปแบบที่ได้รับการออกแบบมาเป็นเวลา 15 ปีหรือมากกว่านั้น

ฉันประหลาดใจมากที่ Microsoft อนุญาตให้มีข้อ จำกัด เช่นนี้ในกำหนดการของพวกเขา

ฉันประหลาดใจมากที่คุณไม่เคยบอทเทอร์ไปถามว่าทำไม

มีหลายประเด็น:

  • เมื่อมีคนหลายคนเข้าสู่ระบบใครจะได้รับ UI
  • เมื่อผู้ใช้ออกจากระบบคุณฆ่าโปรแกรมหรือไม่ OUCH
  • ความปลอดภัย โปรแกรมพื้นหลังอาจทำงานภายใต้สิทธิ์ที่ จำกัด - การเปิดเผย UI ให้กับผู้ใช้หมายความว่าผู้ใช้สามารถรันโค้ดที่นั่น รูปแบบการส่งข้อความของ windows คือ - ah - เต็มไปด้วยปัญหา

ฉันไม่ต้องการที่จะสร้างโปรแกรมเฉพาะ GUI แยกต่างหากที่เชื่อมต่อกับโปรแกรมดั้งเดิมโดยวิธี

ทั้งฉันและ Microsoft ไม่สนใจในจุดนี้ว่าคุณชอบทำอะไร มีรูปแบบที่ได้รับการยอมรับและได้รับการสนับสนุนในการเชื่อมโยงการประมวลผลพื้นหลังเข้ากับ UI ผู้ใช้ที่ล็อกอิน - ใช้งานหรือไม่ แต่เมื่อไม่ทำอย่ารวบรวมปัญหาด้านความปลอดภัยที่คุณพบเจอ


3
สาธุ ฉันหวังว่าผู้จำหน่ายแอปมากขึ้นจะเข้าใจแนวคิดนี้
Ryan Bolger

15
ว้าวคุณไม่ได้วางท่าในทัศนคติของคุณ เอาล่ะฉันก็โชคไม่ดี ถ้าคุณไม่เข้าใจผิดและบางคนมีวิธีแก้ปัญหานี้ทุกคนก็ไม่สามารถรู้ทุกสิ่งได้ดังนั้นคุณอาจผิดกับส่วน "คุณไม่สามารถ" ที่แน่นอนของโพสต์ของคุณ ฉันต้องการปล่อยให้คำถามเปิดไว้สำหรับคำตอบเพิ่มเติมในอีกต่อไปอีกต่อไปในกรณีที่ใครมีวิธีแก้ปัญหาที่ไม่ธรรมดาที่จะแบ่งปัน มิฉะนั้นฉันจะยอมรับคำตอบของคุณ
มาร์คัส

ในความเป็นจริงมันยากขึ้นเรื่อย ๆ ที่จะให้บริการ UI กับ Windows รุ่นปัจจุบัน แต่ไม่สามารถทำได้
MDMoore313

ไม่ต้องการอย่างแข็งขันเพราะส่วนใหญ่กังวลเรื่องความปลอดภัย ปัญหาหลักของที่นี่คือ - และคุณต้องได้รับนั้น - ถ้าคุณแสดงหน้าต่างใน UI ของฉันฉันสามารถรันโค้ดในกระบวนการของคุณ ฉันสามารถส่งข้อความ windows ให้คุณและมีตันของสิ่งที่สามารถใช้ประโยชน์ได้ ปกติไม่เป็นปัญหา - เพราะถ้าเป็นแอพผู้ใช้ฉันสามารถทำสิ่งต่าง ๆ ที่ฉันเป็นผู้ใช้เท่านั้น แต่ถ้าบริการมีสิทธิ์สูงกว่าที่นี่ฝันร้ายด้านความปลอดภัยจะไป นี่คือเหตุผลที่ปิดนี้เป็นเวลาหลายปีที่ผ่านมาและทุกคนที่เรียนรู้การเขียนโปรแกรมและอ่านเอกสารที่ควรอ่านเกี่ยวกับมัน
TomTom

1
หากคุณต้องการไปที่นั่นจริงๆคุณสามารถลองทำตามขั้นตอนในcoretechnologies.com/WindowsServices/FAQ.html#GUIServices - ไม่แน่ใจว่าพวกเขายังคงทำงานในหน้าต่างปัจจุบัน แต่มีวิธีทำให้ UI accessbile - และเปิดปัญหาด้านความปลอดภัยทั้งหมด .
TomTom

0

มันเป็นเรื่องของการSessionที่โปรแกรมของคุณทำงานหากไม่มีใครลงชื่อเข้าใช้ไม่มีเซสชันแบบโต้ตอบที่จะแสดงภายใต้ฉันเชื่อว่ามันทำงานภายใต้Session 0ซึ่งมี UI แปลก ๆ ที่ไม่แสดงเหมือนคนอื่น ๆ

ตอนนี้หากโปรแกรมของคุณตรวจพบเมื่อexplorer.exeเปิดตัว (หรือวิธีอื่นในการตรวจสอบการเข้าสู่ระบบของผู้ใช้) และเปลี่ยนแปลงตัวเองอย่างน่าอัศจรรย์หรือสร้างกระบวนการลูกบางอย่างในเซสชันใหม่นั้นผู้ที่ลงชื่อเข้าใช้จะเห็นว่าคุณกำลังทำอะไรอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.