2016-08-05 8 views
7

मैं एक .iss स्क्रिप्ट का उपयोग कर रहा Inno Setup Compiler के अंदर एक exe ​​ फ़ाइल का निर्माण करने के "पथ निर्दिष्ट नहीं खोजा जा सका"। मैं इस आवेदन में कुछ node_modules पैकेज की जरूरत है तो मैं [Files] जो इस तरह दिखता है के तहत एक लाइन है:Inno सेटअप संकलक लंबे रास्तों के साथ त्रुटि

The system cannot find the path specified.

यहाँ है:

Source: "{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \ 
    DestDir: "{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs 

जब मैं संकलन, मैं इस त्रुटि मिलती है कंपाइलर आउटपुट:

Compiler Output

तो, यह दिखाई देता है जब तक इसे निरस्त नहीं किया जाता है। मेरा प्रारंभिक विचार यह था कि browser.js मौजूद नहीं है लेकिन डबल चेकिंग के बाद, यह मामला नहीं है। साथ ही, मैं स्रोत पथ में वाइल्डकार्ड का उपयोग कर रहा हूं इसलिए संकलक जानता है कि फ़ाइल मौजूद है, लेकिन ऐसा लगता है कि इसे संपीड़ित करने में समस्या हो रही है।

एक अन्य बात यह है कि समस्या उत्पन्न हो सकती है क्योंकि समस्या फ़ाइल पथ की लंबाई है। नोड मॉड्यूल आमतौर पर नेस्टेड निर्भरताओं के कारण हास्यास्पद फ़ाइल पथ लंबाई होने का अंत होता है। इस मामले में, पथ की लंबाई है। मान लीजिए कि समस्या क्या हो रही है, क्या इसके आसपास जाने का कोई तरीका है?

उत्तर

4

यह निश्चित रूप से एक लंबे रास्ते के कारण है। आम तौर पर विंडोज अनुप्रयोग MAX_PATH (260 वर्ण) से अधिक पथों को संसाधित नहीं कर सकते हैं।
एमएसडीएन पर Naming Files, Paths, and Namespaces देखें।

एक आम कामकाज \\?\ (फिर से ऊपर एमएसडीएन आलेख देखें) के साथ पथ का उपसर्ग कर रहा है। उपसर्ग का उपयोग केवल पूर्ण पथ के लिए किया जा सकता है। लेकिन इनो सेटअप कंपाइलर उस पर Source विशेषता के साथ चोक करता है। यह : की तलाश करता है और यह केवल उस पथ को स्वीकार करता है जिसमें : से पहले ड्राइव अक्षर होता है या compiler: या userdocs: उपसर्ग का उपयोग करता है।

आप वॉल्यूम आईडी (इसलिए कोई कॉलन) के साथ यूएनसी पथ का उपयोग करके इसे हैक कर सकते हैं।

अपने स्रोत ड्राइव के लिए यूएनसी पथ खोजने के लिए mountvol कमांड का उपयोग करें।

और फिर आपको DestDir विशेषता के साथ लंबे पथ के साथ एक ही समस्या होगी, जबकि संकलन करते समय (संकलन नहीं करते)। वहां, कोलन के साथ कोई समस्या नहीं है, इसलिए आप बस \\?\ उपसर्ग का उपयोग कर सकते हैं।

Source: "\\?\Volume{bb919c3e-bdb1-42b8-9601-6715becd8683}\{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \ 
    DestDir: "\\?\{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs 
संबंधित मुद्दे