यहाँ मैंने पाया कि मेरे क्लिकऑन एप्लिकेशन के तैनात फ़ोल्डर स्थान को प्राप्त करने में सक्षम होने के लिए काम किया है और इसका उल्लेख कहीं भी नहीं किया गया है जो मैंने अपनी खोजों में, अपने समान, विशिष्ट परिदृश्य के लिए देखा है:
- क्लिकऑन एप्लिकेशन को कंपनी LAN नेटवर्क फ़ोल्डर में तैनात किया जाता है।
- क्लिकऑन एप्लिकेशन ऑनलाइन या ऑफलाइन उपलब्ध होना तय है।
- मेरे क्लिकऑन इंस्टॉलेशन URL और मेरे प्रोजेक्ट गुणों में अपडेट URL में कुछ भी निर्दिष्ट नहीं है। यही है, स्थापना या अपडेट के लिए कोई अलग स्थान नहीं है।
- मेरे प्रकाशन विकल्पों में, मैं क्लिकऑन एप्लिकेशन के लिए एक डेस्कटॉप शॉर्टकट बना रहा हूं।
- जिस फ़ोल्डर को मैं स्टार्टअप के लिए पथ प्राप्त करना चाहता हूं वह एक है जिसे मैं पथ के हार्डकोडिंग के बिना, एप्लिकेशन के DEV, INT और PROD संस्करणों द्वारा एक्सेस करना चाहता हूं।
यहाँ मेरे उपयोग के मामले का एक दृश्य है:
- नीले बॉक्स वाले फ़ोल्डर प्रत्येक वातावरण के अनुप्रयोग के लिए मेरी निर्देशिका स्थान हैं।
- लाल बॉक्स्ड फ़ोल्डर वह निर्देशिका है जिसके लिए मैं पथ प्राप्त करना चाहता हूं (जिसके लिए पहले ऐप के तैनात फ़ोल्डर स्थान "MyClickOnceGreatApp_1_0_0_37" की आवश्यकता होती है जो ओपी के समान है)।
मुझे इस सवाल या उनकी टिप्पणियों में उस फ़ोल्डर को वापस करने के लिए काम करने के लिए कोई सुझाव नहीं मिला, जिस पर क्लिकऑन एप्लिकेशन को तैनात किया गया था (जो कि तब मैं इस फ़ोल्डर के सापेक्ष स्थानांतरित करूंगा, रुचि के फ़ोल्डर को खोजने के लिए)। कोई अन्य इंटरनेट खोज या संबंधित एसओ सवालों का जवाब नहीं मिला।
सभी सुझाए गए गुण या तो ऑब्जेक्ट के कारण विफल हो रहे थे (उदाहरण के लिए एक्टिवेशनयूरी) अशक्त होने के कारण, या स्थानीय पीसी के कैश्ड इंस्टॉल किए गए एप्लिकेशन फ़ोल्डर की ओर इशारा कर रहे थे। हां, मैं इस्कॉनड्रॉपल्ड के लिए एक चेक द्वारा सुशोभित रूप से अशक्त वस्तुओं को संभाल सकता हूं - यह कोई समस्या नहीं है - लेकिन आश्चर्यजनक रूप से IsNetworkDeployed गलत है, भले ही मैं वास्तव में क्लिकऑन एप्लिकेशन के लिए एक नेटवर्क परिनियोजित फ़ोल्डर स्थान रखता हूं। ऐसा इसलिए है क्योंकि एप्लिकेशन स्थानीय, कैश्ड बिट्स से चल रहा है।
समाधान को देखने के लिए है:
AppDomain.CurrentDomain.BaseDirectory
जब मैं विकसित हो रहा हूं और जब दृश्य स्टूडियो के भीतर एप्लिकेशन चलाया जा रहा है
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
जब यह सामान्य रूप से निष्पादित हो रहा है।
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
सही ढंग से उस नेटवर्क निर्देशिका को लौटाता है जो मेरे क्लिकऑन एप्लिकेशन को सभी मामलों में तैनात किया गया है। यह है, जब यह के माध्यम से शुरू किया गया है:
- setup.exe
- MyClickOnceGreatApp.application
- डेस्कटॉप शॉर्टकट को पहले एप्लिकेशन के इंस्टॉल और लॉन्च पर बनाया गया था।
यहां वर्कअकाउंट फ़ोल्डर का पथ प्राप्त करने के लिए मैं एप्लिकेशन स्टार्टअप पर कोड का उपयोग करता हूं। तैनात किए गए एप्लिकेशन फ़ोल्डर को प्राप्त करना केवल मूल निर्देशिकाओं तक मार्च नहीं करने से सरल है:
string directoryOfInterest = "";
if (System.Diagnostics.Debugger.IsAttached)
{
directoryOfInterest = Directory.GetParent(Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).FullName).FullName).FullName;
}
else
{
try
{
string path = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
path = path.Replace("file:", "");
path = path.Replace("/", "\\");
directoryOfInterest = Directory.GetParent(Directory.GetParent(path).FullName).FullName;
}
catch (Exception ex)
{
directoryOfInterest = "Error getting update directory needed for relative base for finding WorkAccounts directory.\n" + ex.Message + "\n\nUpdate location directory is: " + System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
}
}