7

अतीत में हमने किसी विशेष प्रोजेक्ट के लिए हमारे। एमएसआई इंस्टॉलर्स बनाने के लिए उन्नत इंस्टॉलर का उपयोग किया है। उन्नत इंस्टॉलर के लिए हमारा वार्षिक लाइसेंस समाप्त हो गया है, इसलिए नवीकरण लागत से बचने के लिए, और क्योंकि मुझे लगता है कि इसे विजुअल स्टूडियो के साथ पूरा किया जा सकता है, मैं अपने .msi बनाने के लिए विजुअल स्टूडियो 2010 सेटअप प्रोजेक्ट का उपयोग करने का प्रयास कर रहा हूं।कस्टम एक्शन काम नहीं कर रहा है - विजुअल स्टूडियो सेटअप प्रोजेक्ट

अधिकांश भाग के लिए, मैंने विजुअल स्टूडियो के साथ बनाया गया इंस्टॉलर ठीक काम करता है। हालांकि, एक चीज जिसे हमें इंस्टॉलर की आवश्यकता है, उसे कुछ चलाएं .reg फ़ाइलों को रजिस्ट्री में सेटिंग्स का एक बड़ा संग्रह जोड़ने के लिए (यह ध्यान देने योग्य हो सकता है कि यह पुराना सॉफ़्टवेयर है जिसे केवल तब तक बनाए रखा जा रहा है जब तक इसे बनाए रखा जा सके पूरी तरह से निकट भविष्य में बदल दिया गया है। सेटिंग भंडारण की हमारी पद्धति को बदलने के लिए व्यावहारिक नहीं है)। उन्नत इंस्टॉलर के साथ, हम .cmd फ़ाइल को "इंस्टॉल" कस्टम एक्शन के रूप में निष्पादित करने में सक्षम थे जो इन को चलाएगा .reg फ़ाइलें जो इंस्टॉलेशन में भी शामिल थीं। वी.एस. सेटअप परियोजनाओं कस्टम क्रिया है, लेकिन ऐसा लगता है कि यहाँ वे या तो .dll या .exe फ़ाइलों होना भी आवश्यक है, तो मैं एक .bat या .cmd फ़ाइल का उपयोग कर के लिए एक विकल्प खोजने होंगे।

सबसे पहले, मैं अपने समाधान करने के लिए एक कमांड लाइन परियोजना है कि केवल main() प्रणाली में निम्नलिखित लाइनों शामिल जोड़ने की कोशिश की:

using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg")) 
{ 
    registryInput.WaitForExit(); 
} 

using (Process registryInput= Process.Start("regedit.exe", "/s Settings2.reg")) 
{ 
    registryInput.WaitForExit(); 
} 

मैं "स्थापित करें" करने के लिए इस परियोजना का प्राथमिक आउटपुट जोड़ा "कस्टम क्रियाएं" संपादक का फ़ोल्डर। इंस्टॉलर को चलाने का प्रयास किया, लेकिन कमांड लाइन प्रक्रिया कभी नहीं चलती थी और कोई रजिस्ट्री सेटिंग्स इंस्टॉल नहीं हुई थीं। यदि मैंने मैन्युअल रूप से उस एप्लिकेशन निर्देशिका से निष्पादन योग्य कमांड लाइन को चलाया जहां इसे स्थापित किया गया था, तो उसने रजिस्ट्री प्रविष्टियों को इरादे से जोड़ा - इसलिए समस्या .reg फ़ाइलों को कॉल करने के लिए उपयोग किए जा रहे कोड के साथ नहीं है।

मैं एमएसडीएन में बदल गया और अपने समाधान को Custom Actions Walkthrough के बाद मॉडल करने के लिए बदल दिया। मैंने क्लास लाइब्रेरी प्रोजेक्ट बनाया (और मेरी कमांड लाइन प्रोजेक्ट को हटा दिया) और एक इंस्टालर क्लास जोड़ा। उनके उदाहरण में दिखाए गए Commit() विधि में माइक्रोसॉफ्ट के वेबसाइट यूआरएल का उपयोग कर ब्राउज़र शुरू करने के बजाय, मैंने उपरोक्त कोड को इंस्टॉल() विधि में जोड़ा।

[RunInstaller(true)] 
public partial class Installer1 : System.Configuration.Install.Installer 
{ 
    public Installer1() 
    { 
     InitializeComponent(); 
    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Install(IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 

     using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg")) 
     { 
      registryInput.WaitForExit(); 
     } 

     using (Process registryInput = Process.Start("regedit.exe", "/s Settings2.reg")) 
     { 
      registryInput.WaitForExit(); 
     } 
    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Commit(IDictionary savedState) 
    { 
     base.Commit(savedState); 
    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Rollback(IDictionary savedState) 
    { 
     base.Rollback(savedState); 
    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Uninstall(IDictionary savedState) 
    { 
     base.Uninstall(savedState); 
    } 
} 

मैं "कस्टम कार्रवाइयां 'संपादक की" स्थापित करें "फ़ोल्डर में इस नई कक्षा लाइब्रेरी परियोजना के प्राथमिक आउटपुट कहा: यहाँ मैं के साथ समाप्त हो गया है। फिर भी, जब मैं इंस्टॉलर चलाता हूं, तो कोड निष्पादित नहीं होता है और मेरी रजिस्ट्री सेटिंग्स को नहीं जोड़ा जाता है। मैंने इस इंस्टॉलर को "सभी उपयोगकर्ताओं के लिए इंस्टॉल करें" और "केवल यह उपयोगकर्ता" सेट करने का प्रयास किया है।

या तो इस कस्टम एक्शन काम करने या इंस्टॉल पर चलाने के लिए .reg फ़ाइल प्राप्त करने के लिए वैकल्पिक विधि को प्राप्त करने में कोई मदद की सराहना की जाएगी। पहले ही, आपका बहुत धन्यवाद।

+4

आप 'cmd.exe/c .cmd' का उपयोग कर .cmd या .bat फ़ाइलों को चला सकते हैं। –

+3

वर्बोज़ लॉगिंग के साथ अपनी स्थापना को चलाने का प्रयास करें: 'msiexec/i product.msi/l * vx product.log'। इस लॉग फ़ाइल में आपके कस्टम क्रियाओं को निष्पादित करने के लिए उपयोग की जाने वाली कमांड लाइनें होंगी। –

+0

कम से कम VS2005 में, यह आपको "cmd.exe/c .cmd" को चलाने के लिए आदेश के रूप में नहीं जाने देगा, आपको फ़ोल्डर ब्राउज़र से फ़ाइल चुननी होगी :( – gollumullog

उत्तर

5

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

भले ही मैं बिना किसी प्रतिबंध (AFAIK) के अपने मशीन पर एक पूर्ण व्यवस्थापक हूं, इंस्टॉलर कभी भी कस्टम क्रियाएं नहीं उठाएगा। जैसे ही मैंने विजुअल स्टूडियो को बंद कर दिया और फिर व्यवस्थापक के रूप में पुनरारंभ किया (राइट क्लिक> व्यवस्थापक के रूप में चलाएं), कस्टम क्रियाएं तुरंत इंस्टॉलर द्वारा उठाई गईं।

+5

पर स्थित है। धन्यवाद। आपने मुझे एक नए मॉनीटर की लागत बचाई। मैं पंचिंग से लगभग दो सेकंड दूर था यह। –

1

मैंने कीबोर्ड पर अपने सिर को थोड़ी देर के लिए टक्कर लगी - और इंस्टालर क्लास के कन्स्ट्रक्टर में मेरी कस्टम स्थापना कार्रवाइयों को रखने के बाद ही इसे चलाया गया। , http://msdn.microsoft.com/en-us/library/d9k65z2d(v=VS.100).aspx

0

देखने के लिए कि इस लिंक में मदद करता है यह मुझे मदद मिली:

मैं ट्यूटोरियल मैं यहां पाया पीछा

Visual Studio 2008 Installer, Custom Action. Breakpoint not firing

असल में, कोड के बाद

base.Install (stateSaver);

निष्पादित नहीं किया जा रहा है। तो आधार डालें। इंस्टॉल करें (स्टेटसेवर); विधि में अंतिम पंक्ति के रूप में।

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