2016-08-04 7 views
6

मेरे पास माइक्रोसॉफ्ट क्लिकऑन के माध्यम से तैनात .NET Framework 4.5 पर चल रहा एक सी # अनुप्रयोग है। मैं डीसीओएमपीर्म.एक्सई नामक एक माइक्रोसॉफ्ट एसडीके से एक छोटी उपयोगिता का भी उपयोग कर रहा हूं जो एक सी ++ एप्लीकेशन है जिसे मुझे अलग से संकलित करना था। मेरा मुख्य एप्लिकेशन इस निष्पादन योग्य तक पहुंचने के लिए Process.Start() का उपयोग करता है।मैं अपने क्लिकऑन (.NET) एप्लिकेशन के साथ वीसी ++ 2015 पुनर्वितरण योग्य कैसे बंडल कर सकता हूं?

जब मैंने पहली बार क्लाइंट मशीन पर इसे चलाने का प्रयास किया, तो मुझे एक त्रुटि संदेश मिला जिसमें यह बताया गया कि VCRUNTIME140.dll अनुपलब्ध था जब अनुप्रयोग DComPerm.exe को कॉल करने का प्रयास करता था।

VCRUNTIME140.dll missing

यह समझ में आता है ... के बाद से है कि कार्यक्रम सी में संकलित किया गया था ++ यह विजुअल C++ 2015 पुनर्वितरण पैकेज है, जो ग्राहक मशीन पर स्थापित नहीं किया गया था की जरूरत है। मैं इसे जितना संभव हो सके दर्द रहित बनाना चाहता हूं, इसलिए मुझे उम्मीद थी कि मैं अपने क्लिकऑन एप्लिकेशन के साथ वीसी ++ 2015 रेडिस्ट को बंडल कर सकता हूं। प्रोजेक्ट गुणों के तहत> टैब प्रकाशित करें, पूर्वापेक्षाएँ के लिए एक बटन है, जो मुझे यह निर्दिष्ट करने की अनुमति देता है कि एप्लिकेशन को पुनर्वितरण योग्य पैकेज को बंडल करना चाहिए।

Prerequisites on Publish tab

कि सिद्धांत रूप में महान लगता है, लेकिन यह काम नहीं करता। अब जब मैं क्लाइंट मशीन पर अपना क्लिकऑन एप्लिकेशन इंस्टॉल करने का प्रयास करता हूं, तो यह काम नहीं करता है। स्थापना विफल हो जाती है और जो निम्नलिखित प्रासंगिक जानकारी शामिल एक लॉग फ़ाइल, करने के लिए मुझे बताते हैं:

'विजुअल C++ "14" रनटाइम पुस्तकालय (x86)' RunCheck परिणाम: स्थापित घटकों के दृश्य की जरूरत

स्थापना सी ++ "14" रनटाइम लाइब्रेरीज़ (x86) 'स्वीकार किया गया था।

अस्थायी निर्देशिका में प्रतिलिपि फ़ाइलें "C: \ Users \ \ VSD3872.tmp \ मालिक \ AppData \ Local \ अस्थायी"

फ़ाइलें डाउनलोड करके 'सी करने के लिए: \ Users \ मालिक \ AppData \ Local \ अस्थायी \ VSD3872 .tmp \ "

(8/4/2016 12:57:48 PM) 'सी को डाउनलोड कर रहा है' http://go.microsoft.com/fwlink/?LinkID=800028&clcid=0x409 'से' vcredist_x86 \ VCRedist_x86.exe ': \ Users \ मालिक \ AppData \ Local \ अस्थायी \ VSD3872। tmp \ '

डाउनलोड 2016/08/04 12:57:49

में पूरा HRESULT साथ डाउनलोडिंग विफल हुई = -2146697208

और वह संदेश यह बहुत स्पष्ट है कि समस्या क्या है बनाता है: यह है कि यह Redist पैकेज मर चुका है डाउनलोड करने के लिए उपयोग करने के लिए कोशिश कर रहा है the link। केवल ... मुझे यकीन नहीं है कि मैं सही लिंक खोजने के लिए इसे कैसे कह सकता हूं। मुझे आश्चर्य है कि यह स्वचालित रूप से नहीं मिल रहा है क्योंकि यह विजुअल स्टूडियो के साथ एक बग जैसा लगता है। कुछ खोजों से पता चला कि सही लिंक वास्तव में this one है, लेकिन ऐसा नहीं है कि ClickOnce क्या हल हो रहा है। मैं यह भी देखा कि बॉक्स को चेक करके यह मेरा csproj फाइल करने के लिए इसी XML अपडेट किया गया:

<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x86"> 
    <Visible>False</Visible> 
    <ProductName>Visual C++ "14" Runtime Libraries %28x86%29</ProductName> 
    <Install>true</Install> 
</BootstrapperPackage> 

वहाँ कुछ एक्सएमएल टैग मैं स्पष्ट रूप से स्थान निर्दिष्ट करने के लिए उपयोग कर सकते है? या मैं इसे और कैसे ठीक कर सकता हूं? मैं अपने आवेदन को तोड़ने के बिना पुनर्वितरण योग्य कैसे बंडल कर सकता हूं?

+3

'चूंकि उस प्रोग्राम को सी ++ में संकलित किया गया था, इसलिए इसे विज़ुअल सी ++ 2015 पुनर्वितरण योग्य पैकेज की आवश्यकता है, केवल तभी जब आप सीआरटी डीएलएल से लिंक करते हैं। क्यों सीआरटी को स्थिर रूप से लिंक न करें, इसके बजाय ('/ MT', देखें [सीआरटी लाइब्रेरी फीचर्स] (https://msdn.microsoft.com/en-us/library/abx4dbyh.aspx))? – dxiv

+0

@dxiv जो आप यहां कह रहे हैं वह वादा करता है लेकिन मुझे वास्तव में यह समझ में नहीं आता है। क्या आप कह रहे हैं कि अनिवार्य रूप से निष्पादन योग्य में डीएलएल बनाना संभव है, जिससे अलग-अलग पुनर्वितरण की आवश्यकता को नकार दिया जा सके? – SoaperGEM

+0

सीआरटी स्थिर रूप से जुड़े कार्यक्रम के साथ 'VCRUNTIME' DLLs पर निर्भर नहीं होगा। उदाहरण के लिए देखें [मैं विजुअल स्टूडियो एक्सप्रेस 2005 के साथ पूरी तरह से स्थिर रूप से जुड़ा हुआ .exe कैसे बना सकता हूं?] (Http://stackoverflow.com/questions/37398/how-do-i-make-a-fully-statically-linked- exe-with-visual-studio-express-2005) (यह वीएस 2015 के लिए भी काम करता है)। – dxiv

उत्तर

4

मुझे काफी सटीक समस्या थी। आपने पूछा कि ClickOnce हल करने वाले डाउनलोड स्थान को कैसे निर्दिष्ट करें।ऐसा करने के लिए आदेश, खुले

C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages\vcredist_x86\en\package.xml 

और सही URL से Name="https://go.microsoft.com/fwlink/..." साथ विशेषता संपादित करें। वैसे, सही डाउनलोड लिंक खोजने के लिए धन्यवाद, मैं इस पोस्ट को देखने तक इसे खोजने में सक्षम नहीं था।

वीसी ++ रेडिस इसे करने के बाद क्लाइंट के कंप्यूटर पर सही ढंग से स्थापित किया गया।

+1

आपकी मदद के लिए धन्यवाद! और सिर्फ संदर्भ के लिए, यहां [x64 संस्करण] का लिंक है (https://go.microsoft.com/fwlink/?LinkId=615460)। – SoaperGEM

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

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