2012-09-04 6 views
5

सबसे पहले नमस्ते सभी, और यहां खोजे जाने वाले कई बार धन्यवाद, मुझे कुछ मदद करने या सिखाया गया है।प्रतिस्पर्धी ऐप मेरे जैसे ही फ़ोल्डर में स्थापित करता है, बिना व्यवस्थापक प्राइवर्स

मैंने एक गेम के लिए एक कस्टम एचयूडी बनाया है, और मैं उसी गेम के लिए एक अन्य एचयूडी द्वारा प्रेरित सी # में इंस्टॉलर पर काम कर रहा हूं। यह डाउनलोड करता है और मौजूदा निर्देशिका करने के लिए सभी स्क्रिप्ट फ़ाइलें अधिलेखित कर देता है:

C:\Program Files (x86)\Steam\steamapps\me\team fortress 2\tf 

में [, मैं किसी भी नियंत्रण जिस पर दुर्भाग्य से उपयोग करने के लिए फ़ोल्डर की जरूरत नहीं है के बाद से मैं फ़ाइलों को जो वाल्व स्थापित संशोधित कर रहा हूँ]

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

किसी तरह, संस्थापक मैं से प्रेरित किया गया है:, फ़ोल्डर हटा फ़ोल्डर जोड़ने, या फ़ाइलों की प्रतिलिपि करने के लिए, मैं उपयोगकर्ता अनुमतियों हर बार exe शुरू की है बढ़ाने के लिए एक ऐप्लिकेशन मेनिफेस्ट उपयोग करने के लिए मिला है एक ही फ़ोल्डर में स्थापित है जो मैं बिना किसी के लिए हूं जी एक यूएसी संकेत।

उनके एप्लिकेशन का उपयोग केवल सुरक्षा चेतावनी से पता चलता है, लेकिन अगर मैं "हमेशा की जाँच" चेकबॉक्स का चयन, मैं इसे बार बार किसी भी विशेष अनुमति की पुष्टि करने के बिना चला सकते हैं:

http: //www.trishtech .com/img_art_a/win7_publisher_not_verified_0.jpg & gt; ">

कैसे मैं अपने ऐप अधिक उसकी तरह सहज बना सकते हैं पर कोई सुझाव मैं अन्य एप्लिकेशन के लेखक से संपर्क किया है, और वह वह भी सी # उपयोग कर रहा है कहते हैं , लेकिन यह काम करने के लिए वह विशेष कुछ भी नहीं जानता है।

संपादित करें: कुछ चीजें जिन्हें मैं जानता हूं अलग ढंग से कर रही e're, बस मामले में वे एक फर्क किसी भी तरह बनाना:

  • मैं कहाँ मेरी फ़ाइलें डाल करने के लिए तय करने के लिए एक फ़ाइल ब्राउज़र का उपयोग कर रहा है, तो अनुप्रयोग कहीं से भी चलाया जा सकता है।
    • वह उन्हें एक्सई के समान निर्देशिका में आउटपुट कर रहा है, जिसके लिए गंतव्य फ़ोल्डर में exe को रखा जाना आवश्यक है।
  • मैं अपने ऐप के साथ SharpZipLib को बंडल करने के लिए ILMerge का उपयोग कर रहा हूं।
    • वह एक्सई के बगल में अपनी ज़िप फ़ाइल में बस डीएल छोड़ रहा है।
+0

यूएसी डेटा पुनर्निर्देशन के साथ कुछ करने के लिए हो सकता है: http://windowsteamblog.com/windows/b/developers/archive/2009/08/04/user-account-control-data-redirection.aspx – Simon

+0

लिखने के लिए 'प्रोग्राम फ़ाइलें', आपको ऊपर उठाने की जरूरत है। संभवतः अन्य एप्लिकेशन 'प्रोग्राम फ़ाइलें' को वास्तव में नहीं बल्कि वर्चुअलाइज्ड के लिए लिखता है। जांचें कि फ़ाइलों को वास्तव में अन्य एप्लिकेशन के साथ संशोधित किया गया है या नहीं। वर्चुअलस्टोर को भी जांचें: 'सी: \ उपयोगकर्ता \% USERNAME% \ AppData \ Local \ VirtualStore', फ़ाइलों के _ "अद्यतन" _ संस्करण' वर्चुअलस्टोर 'में सबसे अधिक संभावना है। –

+0

वे देखने के लिए कुछ बहुत ही रोचक विषय हैं, धन्यवाद – appski

उत्तर

3

आप करने के लिए "C: \ Program Files (x86)" लिखने की कोशिश कर रहे हैं तो आप जरूरत व्यवस्थापक अधिकार। यह इस प्रकार है कि अन्य ऐप वहां फाइलें नहीं बना रहा है, लेकिन ऐसी निर्देशिका में जो यूएसी द्वारा संरक्षित नहीं है।

यदि आपकी फ़ाइलें प्रति उपयोगकर्ता हैं, तो आप एपडाटा फ़ोल्डर में सबफ़ोल्डर बना सकते हैं और वहां फ़ाइलों को सहेज सकते हैं।

कन्वेंशन,

कंपनी और पहचान उत्पाद के लिए एक और indentity करने के लिए एक फ़ोल्डर बनाने के लिए है जैसे

var dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
      + "\\MyCompanyName\\MyApplicationName"; 
+0

मैं इसे सही उत्तर के रूप में चिह्नित करने जा रहा हूं, क्योंकि यह शायद इस प्रश्न के साथ लगभग हर दूसरे व्यक्ति के लिए सही सलाह है। हालांकि मेरे अपने निष्कर्ष थोड़ा अजनबी हैं, और मैं उन्हें पोस्टरिटी के लिए एक और जवाब में पोस्ट करने जा रहा हूं। – appski

2

वह सिर्फ, exe रूप में एक ही निर्देशिका करने के लिए उन्हें outputting है exe की आवश्यकता होती है गंतव्य फ़ोल्डर में रखा जाना है।

मुझे नहीं लगता कि यह होगा। वही एक्सई निर्देशिका अलग नहीं होनी चाहिए, आपके पास या तो अनुमतियां हैं या आप नहीं करते हैं।

"सामान्य" प्रतिक्रिया होगी, उस निर्देशिका को लिखें जिसके लिए आपको अनुमति है। लेकिन यह हमेशा संभव नहीं है।

यदि आप एक सेवा के रूप में अपना आवेदन चलाते हैं तो यह विंडोज के तहत सोचने के बाद ही पॉपअप होगा, लेकिन यह आपके उपयोग के मामले के लिए सही नहीं लगता है।

मुझे नहीं लगता कि इस तरह के संदेश को दबाने का कोई उचित तरीका होगा, इसकी पकड़ 22 स्थिति की तरह है। ऐसा कुछ करने के लिए जो आप नहीं कर सकते, आपको अनुमति प्राप्त करने की आवश्यकता है (इसलिए उपयोगकर्ता को बढ़ाएं -> यूएसी पॉपअप)।

+0

हाँ, यह निराशाजनक है। इस परियोजना पर बहुत अधिक सीमित कारक हैं, अन्यथा मुझे लगता है कि इस तरह की चीज़ से बचने के लिए बहुत अच्छी सलाह दी गई है। मैं भी सेवाओं में देखूंगा, हालांकि हाँ, जो इस छोटे ऐप के लिए थोड़ा भारी हो सकता है। – appski

0

मैं sgmoore के उत्तर को सही के रूप में चिह्नित कर रहा हूं, हालांकि मेरा स्वयं का मामला कुछ अजनबी लग रहा था और मैं उसे भी दस्तावेज करना चाहता हूं।

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

वास्तव में यूएसी प्रॉम्प्ट की आवश्यकता क्या थी, अजीब बात यह है कि \ Bin \ Debug \ फ़ोल्डर से exe चला रहा था जहां मेरी प्रोजेक्ट शुरू में इसे उत्पन्न कर रही थी। अगर मैं अपने exe कहीं और स्थानांतरित करता हूं और फिर इसे चलाता हूं, तो यह ठीक काम करता है। अगर मैं अपने \ Bin \ Debug \ फ़ोल्डर से अपना exe चलाता हूं, तो वह या तो काम नहीं करता है। मैं यह समझने में सक्षम नहीं हूं कि वह क्यों है।

कुछ और मैंने देखा कि जब मेरा ऐप अपवाद के बिना सफल होने जा रहा है, तो यह लॉन्च होने पर सुरक्षा चेतावनी से संकेत नहीं देता है। यह सिर्फ चुपचाप खुलता है और फिर काम करता है। जब भी यह सुरक्षा चेतावनी प्रदर्शित करता है, यह विफल रहता है।

मुझे लगता है कि प्रोटोकॉल उन दो मुद्दों को नए प्रश्नों में बदलना होगा, लेकिन ऐसा लगता है कि यह संभवतः एजकेस/हैक क्षेत्र में अच्छी तरह से है क्योंकि आप सभी सहमत हैं कि यह भी काम नहीं कर रहा है।

मैं अपने कार्यक्रम को वापस बनाने जा रहा हूं और देख सकता हूं कि क्या मैं अभी भी इन अजीब परिस्थितियों में पूर्ण कार्यक्षमता के साथ काम करने के लिए इसे प्राप्त कर सकता हूं, या मुझे यूएसी ऊंचाई को पुन: सक्षम करना होगा या नहीं।

+0

सुरक्षा चेतावनी आमतौर पर होती है क्योंकि एक्सई को इंटरनेट से डाउनलोड किया गया है और विश्वसनीय नहीं है और फिर यह यूएसी प्रॉम्प्ट को ट्रिगर करता है। यदि आप फ़ाइल को अनब्लॉक करते हैं तो यह आपके bin \ debug फ़ोल्डर से चलाता है? यह नहीं देख सकता कि फाइल को क्यों ले जाना समस्या को हल करेगा जबतक कि आप इसे एक फैट ड्राइव पर नहीं ले जाते। – sgmoore

+0

http://tinyurl.com/9gymcbz क्या आप इसका मतलब इस उदाहरण की तरह अनब्लॉक कर रहे हैं? मेरे पास मेरे गुणों पर बटन नहीं है। – appski

+0

हां यही मेरा मतलब था। यदि बटन वहां नहीं है तो यह एक अलग मुद्दा होना चाहिए। – sgmoore

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