2011-10-24 21 views
6

मुझे अपने ऐप के साथ एक बड़ी समस्या है। मेरे पास एक अलग exe फ़ाइलों के रूप में एक ऐप & अद्यतनकर्ता है। जब कोई अपडेट उपलब्ध होता है, तो अद्यतनकर्ता अपडेट करता है, और प्रक्रिया पूर्ण होने पर यह मेरे ऐप को शुरू करता है। मुख्य समस्या यह है - ऐप प्रोग्राम फ़ाइलों फ़ोल्डर में स्थापित है, इसलिए अद्यतनकर्ता को यूएसी व्यवस्थापक विशेषाधिकारों की आवश्यकता है, और यह ठीक है, लेकिन जब मुझे अपने ऐप अपडेटर को चलाने की आवश्यकता होती है तो इसे सामान्य उपयोगकर्ता के रूप में चलाने की आवश्यकता होती है, क्योंकि यदि यह व्यवस्थापक ड्रैग के रूप में चलाया जाता है और ड्रॉप काम नहीं करता है (एक ऐप समस्या नहीं, यूएसी इसे ब्लॉक करता है)। मैंने कई अलग-अलग समाधानों की कोशिश की है, और यहां तक ​​कि यह भी एक: How to run NOT elevated in Vista (.NET)सी # यूएसी व्यवस्थापक स्तर की प्रक्रिया से कम विशेषाधिकारों के साथ प्रारंभिक प्रक्रिया

इससे मेरी सहायता नहीं हुई - मेरा ऐप व्यवस्थापक के रूप में चलाया जाता है।

उत्तर

9

आप एक ऊंचे से एक गैर-उन्नत प्रक्रिया शुरू करने से बेहतर बेहतर होगा। यह मुश्किल हिस्सा और त्रुटि प्रवण है।

यह दृष्टिकोण बेहतर है:

  1. आपका अपडेटर शुरुआत में गैर-ऊंचा आवेदन के रूप में शुरू होता है, और उसके प्रकट asInvoker स्तर है।
  2. जब यह शुरू होता है, तो यह runas क्रिया का उपयोग करके ऊंचे विशेषाधिकारों के साथ पुन: प्रारंभ होता है, और इसे इंगित करने के लिए कमांड-लाइन पैरामीटर पास करता है। यह उदाहरण अद्यतन और रिटर्न करता है।
  3. यहाँ फिर गैर ऊंचा अपडेटर आता है और उस चरण 1.

सुंदर सरल और मजबूत में अपडेटर का पहला उदाहरण शुरू कर दिया एक ही गैर उठाया उपयोगकर्ता टोकन के साथ अपने आवेदन शुरू होता है।

+0

+1 लगता है; इस उत्तर की पहली पंक्ति काफी महत्वपूर्ण है। मैंने लेख पढ़े हैं जिन्होंने कहा है कि डी-एलिवेट करने का प्रयास करना एक बुरा विचार है (प्रतिरूपण करने के लिए एक डी-एलिवेटेड टोकन प्राप्त करें), इससे कोई फर्क नहीं पड़ता कि आप किस तकनीक का प्रयास करते हैं। यह सुनिश्चित नहीं है कि Vista या उन लेखों को कहां से ढूंढें जब से मैं विस्टा पहली बार बाहर आया था। इस प्रश्न में एक और विकल्प दिया गया है: http://stackoverflow.com/questions/1173630/how-do-you-de-elevate-privileges-for-a-child-process –

+0

मैं इसे इस तरह से आजमाउंगा, आपके लिए धन्यवाद जवाब। :) – n1tr0

+0

इसे इस तरह बनाया - एक आकर्षण की तरह काम करता है! बहुत - बहुत धन्यवाद मेरे दोस्त! ;) – n1tr0

0

इस पोस्ट को देखें कि कैसे एक उन्नत प्रक्रिया के लिए खींचें और ड्रॉप को सक्षम करें। भले ही यह कहते हैं MFC एप्लिकेशन को आप किसी भी ऐप्लिकेशन में उन Windows API CLL कर सकते हैं मैं

https://helgeklein.com/blog/2010/03/how-to-enable-drag-and-drop-for-an-elevated-mfc-application-on-vistawindows-7/