2009-02-06 17 views
45

विंडोज़ बंद होने पर मुझे अपने आवेदन के साथ कोई समस्या है - मेरा ऐप अच्छी तरह से बाहर नहीं निकल रहा है, जिसके परिणामस्वरूप एंड टास्क विंडो प्रदर्शित की जा रही है। क्या चल रहा है यह देखने के लिए मैं डीबगर का उपयोग कैसे कर सकता हूं?डीबगिंग के लिए विंडोज शट डाउन अनुकरण कैसे करें?

क्या मेरे एप्लिकेशन में विंडोज शटडाउन संदेश भेजने का कोई तरीका है, इसलिए ऐसा लगता है कि विंडोज बंद हो रहा है, इसलिए मैं देख सकता हूं कि यह वास्तव में कैसा व्यवहार करता है?

उत्तर

58

विंडोज के लिए माइक्रोसॉफ्ट के लोगो परीक्षण उपकरण में पुनरारंभ प्रबंधक (rmtool.exe) नामक एक उपकरण है, जिसका उपयोग शटडाउन भेजने और किसी प्रक्रिया में संदेशों को पुनरारंभ करने के लिए किया जा सकता है। लोगो परीक्षण उपकरण यहाँ डाउनलोड किया जा सकता है:

http://download.microsoft.com/download/d/2/5/d2522ce4-a441-459d-8302-be8f3321823c/LogoToolsv1.0.msi

तो फिर आप अपने प्रक्रिया के लिए बंद अनुकरण कर सकते हैं:

rmtool.exe -p [PID] -S 

जहां [पीआईडी] प्रक्रिया आईडी है। विस्टा लोगो प्रमाणन परीक्षण मामलों दस्तावेज़ के अनुसार,

पुनः प्रारंभ प्रबंधक शट डाउन संदेशों हैं:

एक। LPARAM = ENDSESSION_CLOSEAPP (0x1) के साथ WM_QUERYENDSESSION: GUI अनुप्रयोगों को तुरंत पुनरारंभ करने के लिए तैयार करने के लिए (TRUE) प्रतिसाद देना होगा।

बी। LPARAM = ENDSESSION_CLOSEAPP (0x1) के साथ WM_ENDSESSION: एप्लिकेशन को 5 सेकंड के भीतर बंद करना होगा (सेवाओं के लिए 20 सेकंड)।

सी। CTRL_SHUTDOWN_EVENT: कंसोल अनुप्रयोगों को तुरंत बंद करना होगा।

+0

कमाल! (मैंने अभी तक यह कोशिश नहीं की है - अगर कोई इसका उपयोग करता है और वह फीडबैक प्रदान कर सकता है जो बहुत अच्छा होगा) – Rory

+2

आपका लिंक टूटा हुआ है। लोगो परीक्षण उपकरण पुराने विंडोज 7 क्लाइंट सॉफ्टवेयर लोगो प्रोग्राम का हिस्सा थे। उपकरण अब माइक्रोसॉफ्ट की वेबसाइट पर नहीं हैं। ऐसा लगता है कि उपकरण विंडोज ऐप सर्टिफिकेशन किट द्वारा अधिलेखित किए गए हैं, जो कि विंडोज 10 डेस्कटॉप ऐप सर्टिफिकेशन प्रोग्राम का हिस्सा है। किट में 'rmtool.exe', केवल 'rmlogotest.exe' शामिल नहीं है। मैंने कहीं और 'rmlogotest.exe' के बारे में कुछ लिखा है; मैंने जो लिखा है उसे पढ़ने के लिए, [इस लिंक] का पालन करें (http://superuser.com/questions/959364/on-windows-how-can-i-gracefully-ask-a-running-program-to-terminate# 1,154,058)। – unforgettableid

+0

'rmlogotest.exe' आपके ऐप पर कुछ संदेश भेजता है, और मुझे संदेह है कि वे वही संदेश हैं जो 'rmtool.exe' भेजने के लिए उपयोग किए जाते थे, लेकिन मैंने यह सुनिश्चित करने के लिए जांच नहीं की है। – unforgettableid

6

मेरा मानना ​​है कि जब विंडोज बंद हो रहा है तो यह सभी अनुप्रयोगों में "WM_QueryEndSession" भेजता है। विंडोज शटडाउन अनुकरण करने के लिए आप एक छोटा सा एप्लीकेशन बना सकते हैं जो आपके संदेश पर इस संदेश के साथ पोस्टमेसेज करता है और देखें कि क्या होता है। विंडोज़ वास्तव में आपके एप्लिकेशन को बंद करने के लिए उससे अधिक संदेश भेज सकता है (जैसे WM_CLOSE), लेकिन जब भी आपका एप्लिकेशन "WM_QueryEndSession" संदेश प्राप्त करता है, तो इसका मतलब है कि आपका एप्लिकेशन इसके नीचे से गलीचा खींचने वाला है।

+1

इसके अलावा, WM_QueryEndSession का पालन किया जाता है (WM_EndSession द्वारा इसे प्राप्त करने वाले ऐप्स द्वारा ऑल-ओके दिया जाता है)। – JMD

+0

उत्कृष्ट - स्पष्टीकरण जेएमडी के लिए धन्यवाद। मुझे लगा कि एक अतिरिक्त संदेश होना था, लेकिन मुझे यकीन नहीं था कि यह क्या था। –

+0

कोई उपयोगी यूटिल जो मैं अपने आप को क्राफ्ट करने के बजाए ऐसे संदेश भेजने के लिए उपयोग कर सकता हूं? – Rory

0

आप SystemEvents.SessionEnding ईवेंट का उपयोग कर सकते हैं, जिसे उपयोगकर्ता लॉग ऑफ या शट डाउन करते समय निकाल दिया जाता है। हालांकि इसका उपयोग करते समय सावधान रहें, कुछ संसाधन उपलब्ध होने की गारंटी नहीं है। उदाहरण के लिए, मेरे एप्लिकेशन को किसी सर्वर को आउट करने के लिए बंद होने पर सर्वर को हिट करने की आवश्यकता होती है (एक टाइमक्लॉक एप्लिकेशन), लेकिन जब यह घटना होती है तो नेटवर्क कार्ड कभी-कभी अक्षम हो जाता है। चूंकि आप बस सफाई कर रहे हैं, यह ठीक काम करना चाहिए।

+0

आपने जो लिखा है उसे आजमाने के लिए शट डाउन अनुकरण कैसे कर सकते हैं? – KansaiRobot

0

SendMessage विंडो के किसी भी पैरामीटर के साथ विंडो संदेशों को भेजने के लिए उपयोग किया जा सकता है।

डीबगिंग और परीक्षण के लिए बहुत उपयोगी है।

  1. संदेश WM_QUERYENDSESSION भेजें LPARAM = ENDSESSION_CLOSEAPP साथ। एप्लिकेशन को बंद करने और पुनरारंभ करने के लिए तैयार होने के संकेत के लिए 1 (TRUE) वापस करना होगा।

  2. संदेश WM_ENDSESSION भेजें lParam के साथ = ENDSESSION_CLOSEAPP आवेदन निर्दिष्ट समय अवधि के भीतर शट डाउन करना होगा।

संबंधित मुद्दे