2010-02-18 2 views
9

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

असल में मैं एक ऐसे मुद्दे पर चल रहा हूं जहां मेरी सेवा फाइलों को अपनी निर्देशिका में नहीं बना सकती है क्योंकि इसमें उचित अनुमति नहीं है। मुझे लगता है कि इसे हल करने का सही तरीका यह सुनिश्चित करना है कि सेवा का उपयोग करने वाले किसी भी खाते को उसके फ़ोल्डर पर उपयुक्त फ़ाइल अनुमतियां दी गई हैं।

लेकिन इससे पहले कि मैं .NET के माध्यम से अनुमतियों को सेट करने का तरीका भी हल कर सकूं, मुझे इंस्टॉलेशन फ़ोल्डर को जानने की आवश्यकता है। मैं एक इंस्टॉल प्रोजेक्ट का उपयोग कर रहा हूं जिसमें एक इंस्टॉलर क्लास है जिसमें ServiceInstaller नियंत्रण भी शामिल है। दोनों में Context संपत्ति है इसलिए मैं उन पैरामीटरों के लिए जांच कर रहा हूं जो उपलब्ध हैं जब AfterInstall ईवेंट प्रत्येक संबंधित इंस्टॉलर के लिए आग लगती है। मैंने पहले सोचा था कि मैं TargetDir संपत्ति सेट देख रहा हूं लेकिन यह मामला नहीं है। हालांकि मैं AssemblyPath देख रहा हूं और उपयुक्त फ़ोल्डर के निष्पादन योग्य को इंगित कर रहा हूं।

अनिवार्य रूप से मैं सिर्फ यकीन है कि यह उचित विधि मैं का उपयोग करना चाहिए है बनाना चाहते:

private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) 
{ 
    string InstallPath = System.IO.Path.GetDirectoryName(serviceInstaller1.Context.Parameters["AssemblyPath"]);; 
} 

उत्तर

12

मैंने पाया कि समाधान है कि बर्ग CustomActionData गुण के लिए इस मूल्य का उपयोग कर को छोड़कर मेरे लिए काम करता है दे दिया:

/TargetDir="[TARGETDIR]\" 

नोट बैकस्लैश के अतिरिक्त। यह article on MSDN देखें।

+1

बैकस्लैश "\" के बाद आपको अतिरिक्त स्थान भी जोड़ना होगा। अन्यथा इंस्टॉल या अनइंस्टॉल करते समय आपको FileNotFoundException अपवाद मिल सकता है। [यहां] देखें (http://stackoverflow.com/questions/4516256/how-do-i-fix-setup-project-with- कस्टम-action-file-not-found-exception/4522825#4522825) या [यहां ] (http://stackoverflow.com/questions/8491095/error-1001-using-custom-installer-with-visual-studio-2008)। –

+0

आप इस पाठ का उपयोग कहां कर रहे हैं? क्षमा करें, मेरी व्याख्या मेरे लिए बिल्कुल स्पष्ट नहीं है। परियोजना के लिए कमांड लाइन तर्क के रूप में? कोड में कहीं? एमएसडीएन के लिए यह लिंक अब टूटा हुआ है। धन्यवाद माइक्रोसॉफ्ट! :-) –

+0

ओह, अब मैं देखता हूं। मुझे एक और पोस्ट में जवाब मिला: "अपनी परिनियोजन प्रोजेक्ट में, इंस्टॉल और कमिट के लिए कस्टम एक्शन जोड़ें। कस्टम एक्शन स्थापित करने के लिए कस्टमएक्शनडेटा प्रॉपर्टी के लिए,/targetdir =" [TARGETDIR] \ "दर्ज करें" –

3

आपका कस्टम क्रिया एक आस्थगित कस्टम क्रिया है और केवल कुछ गुण यह करने के लिए उपलब्ध हैं, निम्न पृष्ठ देखें अधिक जानकारी के लिए, http://msdn.microsoft.com/en-us/library/aa370543(VS.85).aspx। आप विजुअल स्टूडियो 2008 में कस्टमएक्शनडेटा में TARGETDIR प्रॉपर्टी जोड़ सकते हैं; हालांकि, मैंने विजुअल स्टूडियो 2008 के साथ एक संलेखन उपकरण के रूप में काम नहीं किया है।

विजुअल स्टूडियो 2008 में जटिल इंस्टॉल करना बहुत मुश्किल है क्योंकि यह एमएसआई की कई प्रमुख विशेषताओं को दूर करता है। मैं दृढ़ता से सुझाव देता हूं कि वाईएक्स पर नज़र डालें।

यदि आप वाईएक्स का उपयोग नहीं करते हैं, तो भी आप ओर्का, http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx डाउनलोड करना और अपने इंस्टॉल को सत्यापित करने के लिए इसका उपयोग करना चाहेंगे। यह आपको अनगिनत घंटे बाद बचाएगा।

+0

क्या वाईआईएक्स विंडोज सेवाओं को स्थापित करने में सक्षम है? –

+0

हाँ वाईएक्स सेवाएं स्थापित करने में सक्षम है। आपको केवल ServiceInstall Element, http://wix.sourceforge.net/manual-wix2/wix_xsd_serviceinstall.htm लिखने की आवश्यकता है। वाईएक्स और विजुअल स्टूडियो 2008 सेटअप परियोजनाएं एमएसआई के लिए दोनों ही सामने हैं। यदि आप वाईएक्स के साथ जाने का फैसला करते हैं तो मैं पढ़ने का सुझाव दूंगा, http://msdn.microsoft.com/en-us/library/aa370566(VS.85).aspx और इसकी सभी उप प्रविष्टियां। यह आपको घटकों और विशेषताओं को समझने में मदद करेगा। मैंने मूल रूप से हमारे इंस्टॉल के लिए विजुअल स्टूडियो 2003 \ 2005 का उपयोग शुरू किया और बस बहुत सी सीमाओं में भाग गया। – LanceSc

+0

मुझे इस प्रोजेक्ट के लिए विजुअल स्टूडियो इंस्टॉलेशन प्रोजेक्ट के साथ रहना पड़ा, लेकिन मुझे भविष्य में अनुसंधान के लिए व्यवहार्य विकल्प देने के लिए +1 करना पड़ा। :) –

0

सेटअप परियोजनाओं के विकल्प के रूप में, आप कुछ इंस्टॉलर बिल्डिंग सेवाओं का उपयोग कर सकते हैं। मुझे लगता है कि, http://installer.codeeffects.com के साथ आप अपनी वेबसाइट से किसी भी फाइल को लोड कर सकते हैं और जब उपयोगकर्ता आपकी सेवा इंस्टॉल करता है तो उन्हें इंस्टॉलेशन निर्देशिका में डाल सकता है। उम्मीद है की यह मदद करेगा।

-1

जहां तक ​​मैं यह कह सकता हूं कि इंस्टॉल निर्देशिका निर्धारित करने का एकमात्र तरीका है। निस्संदेह मैं ध्यान दूंगा कि कोई अलग जवाब के साथ आता है लेकिन तब तक यह वह दृष्टिकोण है जिसे मैं ले रहा हूं।

+1

यह एक उत्तर नहीं है। आप जिस भी समाधान का इस्तेमाल करते हैं वह जवाब है। –

0

अपने कस्टम कार्रवाई में लक्ष्य निर्देशिका संपत्ति के मूल्य प्राप्त करने के लिए आप इसे मैन्युअल अग्रेषित कर सकते हैं कस्टम क्रिया ध्यान में रखते हुए अपने कस्टम कार्रवाई उत्पादन का चयन और की तरह कुछ डाल कर: CustomActionData गुण के लिए मान के रूप में

/TargetDir="[TARGETDIR]" 

आप तब तक पहुँचने के लिए सक्षम होना चाहिए:

string targetDir = Context.Parameters[ "TargetDir" ]; 
+0

जैसा कि मैंने अपने प्रश्न में कहा था, मैंने उस मूल्य की जांच की लेकिन दुर्भाग्यवश यह घटना आग लगने पर सेट नहीं है। –

1

जो लोग कई है के लिए यह

/AppID="[APPID]" /Path="[TARGETDIR]\" 
2

स्थापित दौरान की तरह करना होगा, घटना मैंने किया था यह:

// locate the installation directory and store it where we can find it during Commit 
stateSaver.Add("TargetDir", Context.Parameters["DP_TargetDir"]); 

तो, मैं OnCommitted दौरान बाद में TargetDir पर पहुंच सकता था:

string path = (string)savedState["TargetDir"]; 

सुनिश्चित नहीं है कि इससे मदद मिलती है या नहीं! मैं यह पता लगाने की कोशिश कर रहा हूं कि इंस्टॉल निर्देशिका को विश्वसनीय रूप से कैसे निर्धारित किया जाए ताकि मेरी सेवा कुछ लॉगिंग कर सके।

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

  • कोई संबंधित समस्या नहीं^_^