เรียกใช้อินสแตนซ์ของแอปพลิเคชัน windows หลายอินสแตนซ์


11

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

หากมีเครื่องมือแบบ readymade ฉันต้องการทราบ (ฉันลองใช้ sandboxie และ Altiris SVS โดยไม่ต้องโชค)

หากไม่มีอะไรออกไปข้างนอกฉันต้องการตั้งโปรแกรมเครื่องมือ / แฮ็คที่จะให้ฉันทำสิ่งนี้ ฉันกำลังมองหาพอยน์เตอร์ที่จะเริ่มต้น - สิ่งที่จะเกี่ยวข้องกับสิ่งที่จะต้องมีทักษะ ฉันมีทักษะการเขียนโปรแกรมระดับปานกลางใน C และ Java

หากไม่สามารถทำได้โปรดอธิบายว่าทำไม

แก้ไข: ฉันรู้ว่ามันเป็นความคิดที่ไม่ดี แต่ฉันยังต้องทำ (ด้วยเหตุผลหลายประการ) ฉันต้องการวิธีการทั่วไปที่ใช้ได้กับแอปพลิเคชันใด ๆ และไม่แนะนำข้อผิดพลาด


3
แอปพลิเคชัน Windows ไม่ใช่แบบซิงเกิลโดยค่าเริ่มต้น ถ้าเป็นเช่นนั้นก็หมายความว่ามีคนพยายามอย่างมากที่จะทำให้เป็นโสดและอาจมีเหตุผลในการทำเช่นนั้น
ใน silico

1
ขึ้นอยู่กับวิธีที่แอปพลิเคชันตรวจสอบหลายชุด แอพพลิเคชั่นหลากหลายตรวจสอบในรูปแบบที่แตกต่างกันและบางแอพพลิเคชั่นจะตรวจสอบหลายวิธี
ho1

อย่างที่ใน Silico พูดแม้ว่ามันอาจไม่ใช่ความคิดที่ดี แอปอาจทำให้ข้อมูลเสียหายขัดข้องหรือทำให้เกิดปัญหาอื่น ๆ หากคุณมีหลายสำเนาที่ทำงานอยู่เมื่อไม่ได้ตั้งใจ
ho1

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

คุณพบทางออกหรือไม่?
โทมัส

คำตอบ:


2

แอปพลิเคชันจำนวนมากตรวจสอบรายการส่วนกลางของกระบวนการ (ด้วย EnumProcesses, OpenProcess, GetModuleBaseName และฟังก์ชั่นที่คล้ายกัน) หรือรายการหน้าต่าง (พร้อม EnumWindows, EnumChildWindows)

คุณอาจลองตั้ง hook (ดูตัวอย่าง SetWindowsHookEx, CallNextHookEx และอื่น ๆ ) เพื่อขอใช้ฟังก์ชั่น API เฉพาะเหล่านั้นจากแอพพลิเคชั่นนั้นและแทนที่ข้อมูลที่ร้องขอตามที่คุณต้องการหลอกแอปพลิเคชัน


ขอบคุณสำหรับคำตอบทั้งหมด ฉันเดาว่าเครื่องมือต้องมีการออกแบบอย่างระมัดระวัง เครื่องมือที่มีวิสัยทัศน์ควรเป็นสภาพแวดล้อมระบบปฏิบัติการเสมือนที่มีน้ำหนักเบามากซึ่งไม่เกี่ยวข้องกับการเรียกใช้สำเนา Windows แบบเต็ม แต่ยังทำให้แอปพลิเคชันทั้งหมดเสีย
Jus12

4

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

ใน Windows 16 บิตเมื่อโปรแกรมเริ่มทำงานระบบปฏิบัติการจะส่งผ่านหมายเลขอ้างอิงเฉพาะที่เรียกว่า HINSTANCE มันจะถูกส่งผ่าน HINSTANCE ของกระบวนการที่กำลังทำงานอยู่โดยใช้ไฟล์ปฏิบัติการเดียวกัน (ถ้ามี) ในสมัยนั้นอาจเป็นวิธีที่พบได้บ่อยที่สุดสำหรับโปรแกรมที่จะทราบว่าสำเนากำลังทำงานอยู่หรือไม่ ใน Windows แบบ 32 บิตที่มีหน่วยความจำที่ได้รับการป้องกันพื้นที่ที่อยู่เฉพาะของกระบวนการและจุดสิ้นสุดของการทำงานมัลติทาสก์แบบมีส่วนร่วม HINSTANCE ไม่ได้มีความหมายเหมือนกันอีกต่อไป

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


3

คุณสามารถเรียกใช้แอปพลิเคชันบนบัญชีผู้ใช้ที่แตกต่างกันและการตรวจสอบอินสแตนซ์จะไม่ทำงานอีกต่อไป


2

มันเป็นไปได้!

นี่คือภาพของฉันที่ใช้ครึ่งชีวิต 1 4x ใน 4 windows ทั้งหมดเชื่อมต่อกับเซิร์ฟเวอร์ LAN เดียวกันปัญหาเดียวคือตัวควบคุมที่ไม่ได้เชื่อมโยงอย่างอิสระกับแต่ละหน้าต่าง

https://web.archive.org/web/20150315150158if_/http://img29.imageshack.us/img29/5642/yc0y.jpg

ในการทำเช่นนี้คุณต้อง 'Process Explorer' - โปรแกรมที่ช่วยให้คุณทำสิ่งที่เรียกว่า 'ปิดการจัดการ' ใน 'กระบวนการย่อย' \ BaseNamedObjects \ ValveHalfLifeLauncherMutex 'หรือกระบวนการบางอย่าง มันไม่ยากเลย ไปที่นี่สำหรับคำแนะนำโดยละเอียด - http://am.half-lifecreations.com/forums/index.php?topic=479.0

แต่ใช่สำหรับครึ่งชีวิต แต่รับ Process Explorer และฉันแน่ใจว่าคุณจะสามารถค้นหาจัดการ / กระบวนการที่คุณต้องปิดเพื่อให้โปรแกรมที่คุณต้องการทำงานหลายครั้ง

ฉันไม่เห็นว่าเพราะเหตุใด windows จึงไม่ใช้งานเกมหลายครั้งในการแยก / ล็อคเป็นคุณลักษณะต่อไป! มันชัดเจนเพราะคนจะไม่ซื้อพีซีเป็นจำนวนมาก ... นอกจากนี้ลองดู SoftXSpand สุดยอดจริงๆช่วยให้คุณสามารถใช้งานอินสแตนซ์ของ windows ได้หลายครั้งในฐานะผู้ใช้อิสระ


ปิดตัวจัดการการกลายพันธุ์ทำงานให้ฉัน มันไม่ใช่ครึ่งชีวิต แต่การใช้ mutex ทางด้านโปรแกรมเมอร์นั้นค่อนข้างธรรมดาดังนั้นวิธีนี้จึงเป็นแบบทั่วไป
อาริโซน่า

ไม่ใช่เพราะคนจะไม่ซื้อพีซีเพิ่มเติม เป็นเพราะนักพัฒนาต้องการเพียงอินสแตนซ์เดียว
Wesley Long

1

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


0

ใน Windows 8 และใหม่กว่าคุณกดปุ่ม Shift ค้างไว้แล้วคลิกไอคอน / ปุ่มของโปรแกรมบนทาสก์บาร์ นี้จะเปิดใช้งานปฏิบัติการอีกครั้ง หากแอพไม่ได้ตรวจสอบโคลนคุณจะมีหน้าต่างใหม่

หลักสูตรนี้อาจสร้างความขัดแย้งกับไฟล์ภายในของแอปหากเปิดขึ้นมาตัวอย่างเช่นไฟล์ sqlite ภายในดังนั้นคุณต้องรู้ว่าคุณกำลังทำอะไรอยู่หรือไม่สนใจว่ามีบางอย่างผิดปกติหรือไม่

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