कस्टम बूटस्ट्रैप एप्लिकेशन में सभी लॉग कैसे सेट या प्राप्त करें

मेरे कस्टम बर्न प्रबंधित बूटस्ट्रैप एप्लिकेशन में, मैं इंस्टॉलर की डिफ़ॉल्ट लॉग निर्देशिका सेट करने का एक तरीका चाहता हूं ताकि ग्राहक आसानी से इंस्टॉलेशन लॉग ढूंढ सकें। यदि यह नहीं किया जा सकता है, तो मैं स्थापना के बाद लॉग फ़ाइलों की प्रतिलिपि बनाने का एक उपयुक्त तरीका चाहूंगा।

मैंने अपने सेटअप प्रोजेक्ट (यानी Bundle.wxs) में और मेरे प्रबंधित बूटस्ट्रैप एप्लिकेशन में WixBundleLog चर सेट करने में असफल प्रयास किया। साथ ही, मेरा बूटस्ट्रैप आवेदक सामान्य है ताकि यह मेरे विभिन्न प्रकार के उत्पादों/इंस्टॉल पैकेजों के साथ उपयोग किया जा सके, इसलिए मुझे एक ऐसे समाधान की आवश्यकता है जो पैकेज के नाम को हार्ड कोडिंग किए बिना प्रत्येक पैकेज के लिए इंस्टॉलेशन लॉग सेट/सेट करने के लिए पर्याप्त लचीला है मेरे बूटस्ट्रैप एप्लिकेशन में।

ऐसा लगता है कि उपयोगकर्ता को कमांड लाइन पर "-l" या "-log" का उपयोग करने के लिए मजबूर किए बिना ऐसा करने का कोई तरीका होना चाहिए।

0
जोड़ा संपादित
विचारों: 1

1 उत्तर

WixBundleLog is the burn variable that specifies the log file. It is not possible to override it in the bundle because you cannot set a variable in a bundle that contains the "Wix" prefix. Overriding it in the bootstrapper application doesn't work either because the bootstrapper continues to log to its default.

जला बूटस्ट्रैप बूटस्ट्रैप लॉग और इंस्टॉलेशन पैकेज लॉग के लिए स्ट्रिंग चर सेट करता है। मैं सूची में इन चरों का ट्रैक रखता हूं। तो मेरे कन्स्ट्रक्टर में मेरे पास कुछ ऐसा है:

this.LogsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), @"Company_Name\Logs\Installer\", DateTime.Now.ToString("yyyyMMdd_hhmmss"));
_logVariables = new List();
_logVariables.Add("WixBundleLog");

प्रारूप [WixBundleLog] _PackageId प्रारूप में लॉग फ़ाइलों के लिए स्ट्रिंग चर सेट करें। मेरे बूटस्ट्रैप एप्लिकेशन में जब PlanPackageComplete ईवेंट निकाल दिया जाता है, मेरे पास एक ईवेंट हैंडलर होता है जिसमें मेरी सूची में चर जोड़ने के लिए निम्न कोड शामिल होता है।

//set *possible* log variables for a given package
_logVariables.Add("WixBundleLog_" + e.PackageId);
_logVariables.Add("WixBundleRollbackLog_" + e.PackageId);

स्थापना के अंत में या यदि मेरे बूटस्ट्रैपर को एक त्रुटि का सामना करना पड़ता है, तो मैं निम्न विधि को कॉल करता हूं:

private void CopyLogs()
{
     if (!Directory.Exists(this.LogsDirectory))
         Directory.CreateDirectory(this.LogsDirectory);

     foreach (string logVariable in _logVariables)
     {
         if (this.Bootstrapper.Engine.StringVariables.Contains(logVariable))
         {
             string file = this.Bootstrapper.Engine.StringVariables[logVariable];
             if (File.Exists(file))
             {
                 FileInfo fileInfo = new FileInfo(file);
                 fileInfo.CopyTo(Path.Combine(this.LogsDirectory, fileInfo.Name), false);
             }
         }
     }
 }
0
जोड़ा
WixBundleLog से गंतव्य लॉग पथ प्राप्त करना आसान नहीं होगा, फिर इस पथ और फ़ाइल निर्देशिका से उपसर्ग के बिना फ़ाइल नाम प्राप्त करें, बाद में हम केवल निर्देशिका में सभी फाइलें प्राप्त कर सकते हैं जो सहेजे गए फ़ाइल नाम से शुरू होते हैं और उन्हें कॉपी करते हैं?
जोड़ा लेखक Vladimir Arustamian, स्रोत