2011-11-09 24 views
27

मैंने एक विजुअल स्टूडियो इंस्टालर प्रोजेक्ट के लिए कॉन्फ़िगरेशन फ़ाइल के लिए अनुमतियों को संशोधित करने के लिए कस्टम एक्शन बनाने का प्रयास किया है।कस्टम एक्शन - त्रुटि 1001: फ़ाइल myApp नहीं मिल सका। इंस्टालस्टेट

Installer.cs इस प्रकार है:

public override void Commit(IDictionary savedState) 
{ 
    base.Commit(savedState); 

    // Get path of our installation (e.g. TARGETDIR) 
    //string configPath = System.IO.Path.GetDirectoryName(Context.Parameters["AssemblyPath"]) + @"\config.xml"; 
    string configPath = @"C:\Program Files\Blueberry\Serial Number Reservation\config.xml"; 

    // Get a FileSecurity object that represents the current security settings. 
    FileSecurity fSecurity = File.GetAccessControl(configPath); 

    //Get SID for 'Everyone' - WellKnownSidType works in non-english systems 
    SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null); 

    // Add the FileSystemAccessRule to the security settings. 
    fSecurity.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); 

    // Set the new access settings. 
    File.SetAccessControl(configPath, fSecurity); 

} 

public override void Install(IDictionary stateSaver) 
{ 
    base.Install(stateSaver); 
} 

public override void Rollback(IDictionary savedState) 
{ 
    base.Rollback(savedState); 
} 

public override void Uninstall(IDictionary savedState) 
{ 
    base.Uninstall(savedState); 
} 

तब मैं सेटअप परियोजना के कस्टम क्रिया की धारा कमिट में प्राथमिक आउटपुट (इंस्टालर वर्ग = सच) जोड़ें।

जब मैं इंस्टॉलर चला, मैं निम्नलिखित त्रुटि मिलती है:

Error 1001: Could not find file 'c:\mypath\myapp.InstallState' 

वेब मैं समान अनुभव के कुछ उदाहरण मिल गया है दस्त, लेकिन पेश किए गए समाधानों में से कोई भी मेरे लिए काम किया है।

कोई विचार?

उत्तर

2

कभी-कभी ऐसा होता है जब इंस्टॉलर क्लास सही ढंग से नहीं बनाया जाता है। यहां एक ट्यूटोरियल है जो आपकी मदद कर सकता है: http://devcity.net/Articles/339/1/article.aspx

सुनिश्चित करें कि आपकी कस्टम कार्रवाई ट्यूटोरियल अनुशंसाओं का पालन करती है।

+0

कस्टम एक्शन प्रॉपर्टीज में मेरे लिए यह मामला था, इंस्टॉलर क्लास नाम की संपत्ति को सही पर सेट किया गया था, जब मुझे इसे निष्पादित करने की आवश्यकता थी - इसलिए इसे गलत तरीके से बदलना मेरे लिए चाल था। –

+0

क्या ओपी की त्रुटि थी और इंस्टॉलर क्लास प्रॉपर्टी को बदलना मेरे लिए कोई प्रभाव नहीं था - मेरे वास्तविक मुद्दे को ठीक करने से पहले या बाद में - जो मेरे कस्टमएक्शनडेटा मान में एक लापता उद्धरण को ठीक कर रहा था। – vapcguy

15

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

मेरे इंस्टॉलर क्लास में केवल ओवरराइड जो कुछ भी किया गया था कमिट और अनइंस्टॉल; मुझे लगता है कि इंस्टालस्टेट फ़ाइल को पहले स्थान पर बनाने का प्रभारी था, और चूंकि इसे कभी भी इंस्टॉलस्टेट फ़ाइल नहीं कहा गया था।

+0

जब मैंने आपकी पोस्ट प्राप्त की, तो मैंने वास्तव में यह कोशिश की, लेकिन आईआईआरसी ने काम नहीं किया। मेरे पास सभी 4 ओवरराइड शामिल थे (यद्यपि एक जोड़े ने बहुत कम किया था) लेकिन समस्या बनी रही। दुर्भाग्यवश, मैंने इस परियोजना (लंबी कहानी) को पोस्ट करने के एक सप्ताह बाद छोड़ दिया, इसलिए यह संभावना नहीं है कि मैं कभी वापस जाऊंगा और समाधान की रिपोर्ट करूंगा। – CJM

+1

मेरे लिए प्रोजेक्ट आउटपुट को कस्टम एक्शन इंस्टॉल करने के लिए काम किया (अनइंटल या रोलबैक नहीं)। मुझे त्रुटि 1001 मिल रही थी जब इसे केवल कस्टम एक्शन प्रतिबद्ध करने के लिए जोड़ा गया था। – JimSTAT

+0

यह मेरे लिए काम करता है! – David

41

You can find a solution here

के शब्दों में:

The problem is that the MSI infrastructure is looking for the installation state file which is usually created during the Install phase. If the custom action does not participate in the Install phase, no file is created.

The solution is to add the custom action to both the Install and the Commit phases, although it does nothing during the install phase.

+0

मेरे लिए काम किया। धन्यवाद। – AndrewS

+0

मेरे लिए वर्डकेड भी। धन्यवाद! +1 –

+0

धन्यवाद आदमी! घंटों तक दीवार पर मेरे सिर को टक्कर लगी है। एक अपवित्र अच्छी तरह से संरक्षित। – Tarik

3

कभी कभी, "Debugger.Launch();" डीबगिंग के लिए उन ओवरराइट किए गए कार्यों पर रखा गया है। यदि आप वहां कथन के साथ इंस्टॉलर बनाते हैं, और आपके इंस्टॉलेशन के दौरान, एक संवाद आपको यह पूछने के लिए पॉपअप करेगा कि डीबग की आवश्यकता है, अगर आप 'डिबगिंग रद्द करें' दबाते हैं, तो आपको यह त्रुटि संवाद मिलेगा। चूंकि आपने अपने फ़ंक्शन में 'डीबगर। लॉन्च()' जोड़ा है, तो उस फ़ंक्शन को इंस्टॉलर द्वारा 'मिस्ड' के रूप में माना जाएगा। तो, इसे हटाने के लिए मत भूलना।

+0

मैं जिस कोड को लापरवाही से कॉपी करता हूं, उसमें डीबगर स्टेटमेंट भी पॉपअप नहीं कर रहा था, केवल एक दुखी विफलता जिसके कारण "इंस्टालस्टेट नहीं मिला", मेरे जीवन के कुछ घंटों को बर्बाद करने के किसी भी कारण से नहीं। –

+0

आह, मैंने यह गलती की। धन्यवाद! – David

+0

यहां मैं इस धागे को और अधिक देख रहा हूं; कोई रास्ता नहीं सोच रहा, यह नहीं हो सकता .... बहुत बहुत धन्यवाद! – MattCom

-2

इसे व्यवस्थापक कमांड प्रॉम्प्ट में स्थापित करने का प्रयास करें। यह मेरे लिए काम किया।

+0

यह मेरे लिए भी काम किया जाता है। –

0

अपनी कस्टम कार्रवाई के लिए गुणों में सत्य के बजाय इंस्टॉलर वर्ग = गलत सेट करने का प्रयास करें। यह मेरे लिए इस समस्या को ठीक कर दिया।

+0

1. पर्याप्त विशिष्ट नहीं है (कौन सा चरण? क्या आपने अपने इंस्टालर क्लास में फोकस सेट करने के लिए ईवेंट इंस्टॉल/ओवरराइड फ़ंक्शन शामिल किया था?) 2. मैं कहूंगा कि यह किसी तरह का एज केस था क्योंकि यह ' मेरे लिए काम नहीं करता, और मेरे पास सब कुछ है (प्रत्येक चरण के लिए) कोई मुद्दा नहीं है। – vapcguy

0

मेरे लिए, यह समस्या मेरे कस्टमएक्शनडेटा स्ट्रिंग में टेक्स्टबॉक्स नामों में से किसी एक के आस-पास एक समापन उद्धरण जोड़ने के समान सरल थी।

मैं उपयोगकर्ता इंटरफ़ेस अनुभाग में "टेक्स्टबॉक्स (ए)" और "टेक्स्टबॉक्स (बी)" विंडो का उपयोग कर रहा था। ए में 1 बॉक्स, EDITA1 है, जहां मुझे फ़ाइल के लिए पथ मिलता है, और बी में कुछ डेटाबेस पैरामीटर के लिए 2 बॉक्स, EDITB1 और EDITB2 हैं।मेरे CustomActionData स्ट्रिंग इस तरह देखा:

/filepath="[EDITA1]" /host="[EDITB1] /port="[EDITB2]" 

यह किया जाना चाहिए था:

/filepath="[EDITA1]" /host="[EDITB1]" /port="[EDITB2]" 

([EDITB1] पर बंद करने उद्धरण)

मैं अपने इंस्टालर कक्षा में स्थापित ओवरराइड इस्तेमाल किया पाने के लिए मान (यानी string filepath = Context.Parameters["filepath"];) और इसे इंस्टॉल करने के लिए मेरे ऐप के लिए उन्हें आईएनआई फ़ाइल में लिखने के लिए इस्तेमाल किया गया। मैं कस्टम क्रिया जीयूआई में सभी चरणों के तहत "प्राथमिक उत्पादन" रखा, लेकिन InstallerClass संपत्ति के साथ कुछ नहीं किया: और केवल CustomActionData एक स्थापित करें पर स्ट्रिंग सेट (डिफ़ॉल्ट यह सच है)। मैंने अपने इंस्टॉलर क्लास में ओवरराइड फ़ंक्शन भी शामिल नहीं किए थे, क्योंकि मैं कुछ भी नहीं कर रहा था जो अन्य चरणों में कस्टम था।