2008-12-16 11 views
7

के साथ प्रबंधित कस्टम क्रियाओं का उपयोग करके त्रुटि संदेश कैसे दिखा सकता हूं मैं एक प्रबंधित कस्टम कार्रवाई लिख रहा हूं। मैं एक प्रबंधित सीएल डीएल में प्रबंधित डीएल को लपेटने के लिए विंडोज इंस्टालर एक्सएमएल से डीटीएफ फ्रेमवर्क का उपयोग कर रहा हूं। सीए क्या यह माना जाता है करता है, लेकिन मैं अभी भी त्रुटि हैंडलिंग साथ परेशानी हो रही हूँ:मैं विंडोज इंस्टालर

Dim record As New Record(1) 

' Field 0 intentionally left blank 
' Field 1 contains error number 
record(1) = 27533 
session.Message(InstallMessage.Error, record) 

ऊपर कोड निम्न पाठ MSI लॉग में दिखाया गया है पैदा करता है:

MSI (ग) (सी 4! सी 6) [13: 15: 08: 74 9]: उत्पाद: टेस्टएमएसआई - त्रुटि 27533. केस-संवेदनशील पासवर्ड मेल नहीं खाते हैं।

त्रुटि संख्या एमएसआई के भीतर त्रुटि तालिका में निहित कोड को संदर्भित करती है। ऊपर दिखाया गया संदेश सही है।

मेरी समस्या यह है: विंडोज इंस्टालर त्रुटि के बारे में उपयोगकर्ता को सूचित करने वाला संवाद क्यों नहीं बनाता है?

उत्तर

-1

यदि आप एक संवाद दिखाना चाहते हैं जिसमें संदेश है, तो आपको इसे स्वयं करना होगा।

यहां कुछ कोड है जो मैं एसक्यूएल चलाने वाले प्रबंधित कस्टम क्रियाओं में त्रुटि प्रबंधन करने के लिए उपयोग करता हूं। अगर इंस्टॉलेशन एक पूर्ण यूआई के साथ काम कर रहा है तो यह एक संदेशबॉक्स दिखाता है। यह सी # में है लेकिन उम्मीद है कि आपको यह विचार मिल जाएगा।

private void _handleSqlException(SqlException ex) 
    { 
     StringBuilder errorMessage = new StringBuilder(); 
     errorMessage.Append("A SQL error has occurred."); 
     for (int i = 0; i < ex.Errors.Count; i++) 
     { 
      errorMessage.Append("Index #" + i + "\n" + 
       "Message: " + ex.Errors[i].Message + "\n" + 
       "LineNumber: " + ex.Errors[i].LineNumber + "\n" + 
       "Source: " + ex.Errors[i].Source + "\n" + 
       "Procedure: " + ex.Errors[i].Procedure + "\n"); 
     } 
     session.Log(errorMessage); 
     if (session["UILevel"] == "5") 
     { 
      MessageBox.Show(errorMessage); 
     } 
    } 
+3

यह ऐसा करने का सबसे व्यापक रूप से स्वीकार्य तरीका नहीं है क्योंकि संदेश विंडो इंस्टॉलर के पीछे दिखाई दे सकती है, और मुझे लगता है कि विभिन्न विशेषाधिकारों के साथ लॉन्च किया जाएगा –

13

एमएसआई ऐसा कर सकता है, लेकिन आपको संदेश टाइप तर्क के लिए कुछ अतिरिक्त मूल्यों में या आवश्यकता है।

उदाहरण के लिए।

Record record = new Record(); 
record.FormatString = string.Format("Something has gone wrong!"); 

session.Message(
    InstallMessage.Error | (InstallMessage) (MessageBoxIcon.Error) | 
    (InstallMessage) MessageBoxButtons.OK, 
    record); 

अधिक जानकारी के लिए wix-users मेलिंग सूची से this thread देखें।

2

जानकारी के लिए हाय धन्यवाद।

क्या आप जानते हैं कि कोई तरीका भी बड़े संदेश दिखाता है? जब मैं उपयोग करता हूं:

रिकॉर्ड रिकॉर्ड = नया रिकॉर्ड(); रिकॉर्ड। FormatString = pReallyBigMessage;

  Session.Message(InstallMessage.Error | (InstallMessage)System.Windows.Forms.MessageBoxIcon.Warning | 
       (InstallMessage)System.Windows.Forms.MessageBoxButtons.OK, record); 

केवल भागों प्रदर्शित होते हैं। मैं सत्र के साथ रहना चाहता हूं। संदेश कार्यक्षमता और फोकस के कारण Windows.Forms संदेशबॉक्स का उपयोग नहीं करें।

अभिवादन

2

मैं, एक ही समस्या में पड़ गए हैं Wix के अनुसार: निक रामिरेज ने एक डेवलपर की Windows इंस्टालर एक्सएमएल के लिए गाइड, लॉग और संदेश तरीकों जब एक कस्टम क्रिया एक यूआई से कहा जाता है काम नहीं करते नियंत्रण।

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