दिलचस्प पोस्ट
जावास्क्रिप्ट डायनेमिक वैरिएबल नेम डब्ल्यूपीएफ में कर्सर बदलना कभी-कभी काम करता है, कभी-कभी नहीं होता है कैसे एक दूसरे को CString और :: std :: string :: std :: wstring को बदलने के लिए? आंकड़ा विशेषता के संख्यात्मक मूल्य के आधार पर क्रमबद्ध तत्व एक ऐसा एप्लिकेशन बनाएं जो एक परीक्षण अवधि के बाद समाप्त हो जाएगा .equals () और == ऑपरेटर के साथ दो ऑब्जेक्ट्स की तुलना करें Preg_replace में html टैगों को अनदेखा करें ओरेकल: `(+) 'एक WHERE खंड में क्या होता है? shared_ptr जादू :) निर्भरता वृक्ष को खोजने के लिए gradle का उपयोग करना वास्तव में विराम की समस्या क्या है? ASP.NET वेब प्रपत्र में jQuery के सत्यापन प्लगइन SetTimeout का न्यूनतम मिलीसेकंड मान क्या है? JTextField "अचयनित" ईवेंट का पता लगा रहा है ] का अर्थ जावास्क्रिप्ट कंसोल में है और मैं इसे कैसे प्राप्त करूं

मैं बच्चा प्रक्रिया कैसे चला सकता हूं जिसकी आवश्यकता है ऊंचाई और इंतजार?

7 जीत / यूएसी मुझे पागल है ड्राइविंग

मेरे सी + + एप्लिकेशन के अंदर से, मुझे एक एक्जीक्यूटेबल चलाने की जरूरत है जो विंडोज 7 पर उन्नयन की आवश्यकता होती है। मैं इस बात को बंद करना चाहता हूं और आगे बढ़ने से पहले इसे खत्म करने की प्रतीक्षा कर रहा हूं। ऐसा करने का सबसे आसान तरीका क्या है?

मैं सामान्यतः इस तरह की चीज़ CreateProcess() माध्यम से करता हूं, लेकिन यह निष्पादन योग्यताओं के लिए विफल रहता है, जिन्हें ऊंचाई की आवश्यकता होती है।

मैंने cmd.exe /c ... का उपयोग कर चलने की कोशिश की है, जो कि CreateProcess माध्यम से काम करता है, लेकिन एक बदसूरत सीएमडी टर्मिनल विंडो को पॉपुप्स करता है।

मैं पढ़ रहा हूँ कि ShellExecute() ऊंचाई को ShellExecute() देगी, लेकिन ShellExecute() का उपयोग करते समय इसे समाप्त करने के लिए एक्सई की प्रतीक्षा करना आसान नहीं लगता है। क्या system() तरह कुछ सरल system() काम?

किसी भी अन्य विचारों की बहुत सराहना की जाती है!

वेब के समाधान से एकत्रित समाधान "मैं बच्चा प्रक्रिया कैसे चला सकता हूं जिसकी आवश्यकता है ऊंचाई और इंतजार?"

ShellExecuteEx बजाय ShellExecuteEx उपयोग करें यह फ़ंक्शन निर्मित प्रक्रिया के लिए एक हैंन्डल प्रदान करेगा, जिसे आप उस प्रक्रिया को समाप्त होने तक ब्लॉक करने के लिए उस संभाल पर WaitForSingleObject को कॉल करने के लिए उपयोग कर सकते हैं। अंत में, बस बंद CloseHandle को इसे बंद करने के लिए प्रक्रिया संभाल पर।

नमूना कोड (स्पष्टता और संक्षिप्तता के लिए त्रुटि जाँच की अधिकांश छोड़ी जाती है):

 SHELLEXECUTEINFO shExInfo = {0}; shExInfo.cbSize = sizeof(shExInfo); shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS; shExInfo.hwnd = 0; shExInfo.lpVerb = _T("runas"); // Operation to perform shExInfo.lpFile = _T("C:\\MyApp.exe"); // Application to start shExInfo.lpParameters = ""; // Additional parameters shExInfo.lpDirectory = 0; shExInfo.nShow = SW_SHOW; shExInfo.hInstApp = 0; if (ShellExecuteEx(&shExInfo)) { WaitForSingleObject(shExInfo.hProcess, INFINITE); CloseHandle(shExInfo.hProcess); } 

lpVerb लिए " lpVerb " क्रिया निर्दिष्ट करना lpVerb को जिस एप्लिकेशन को लॉन्च किया जा रहा है उसे ऊपर उठाने का कारण बनता है। यह एप्लिकेशन के मैनिफेस्ट में "requireAdministrator" के लिए अनुमति स्तर सेट करने के बराबर है यह एक प्रशासक और सीमित उपयोगकर्ता दोनों के लिए यूएसी की उन्नयन की आवश्यकता होगी

लेकिन यह ध्यान देने योग्य है कि जब तक बिल्कुल जरूरी नहीं हो, आपको उस एप्लिकेशन को प्रकट करने के लिए "मानक" तरीके को पसंद करना चाहिए, जिसे आप लॉन्च करना चाहते हैं, जो इसके आवश्यक निष्पादन स्तर को निर्दिष्ट करता है यदि आप इस मार्ग पर जाते हैं, तो आप बस lpVerb रूप में "खुले" एक नमूना मैनिफ़ेस्ट नीचे दिखाया गया है:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> 

अंत में, सुनिश्चित करें कि आपकी एप्लिकेशन में जो भी तत्व यूएसी की उन्नयन की प्रक्रिया को निष्पादित करता है तदनुसार चिह्नित किया जाता है । यूजर इंटरफेस में यह मॉडल बनाने के लिए आपका काम है; विंडोज आपके लिए इसे संभाल नहीं करता है यह प्रविष्टि बिंदु पर ढाल आइकन प्रदर्शित करके किया जाता है; उदाहरण के लिए:

यूएसी ढाल एक बटन पर प्रदर्शितयूएसी ढाल एक मेनू आइटम पर प्रदर्शित

आप क्या कर सकते हैं बाल प्रक्रिया "stdin" के लिए एक पाइप बनायें (जैसे कि आप इनपुट को उस प्रक्रिया में रीडायरेक्ट करते हैं) और पाइप को तोड़ने के लिए प्रतीक्षा करें।

ध्यान दें कि प्रक्रिया वास्तव में रीडायरेक्ट इनपुट प्राप्त नहीं करेगी।

यदि आप असमान कमांड प्रॉम्प्ट से कोशिश करते हैं तो

 echo help | diskpart 

आप ऊँचाई देखेंगे और जब तक आप अलग खिड़की बंद नहीं करते हैं, तब तक कमान विंडो की प्रतीक्षा होगी।

ऊंचा विशेषाधिकार प्राप्त के साथ चलाने के लिए, यह आवश्यक है कि इस प्रक्रिया को लॉन्च करने के लिए विशेषाधिकार प्राप्त किया गया है। आमतौर पर यह एक सुरक्षित सेवा की आवश्यकता होती है या आपकी प्रक्रिया को लॉन्च करने के लिए पहले से ही चल रहा है। यह विस्टा के साथ शुरू होने वाला एक परिवर्तन है। एक प्रक्रिया शुरू करने और लॉन्च करने की प्रक्रिया से विरासत में मिली विशेषाधिकार प्राप्त योग्य स्तर के साथ इसे लॉन्च करने में सक्षम होने के लिए प्राधिकारी (आपके एसीएल टोकन के माध्यम से) करना है। माइक्रोसॉफ्ट कड़ी मेहनत कर रहा है कि लोग एक ऊंचा प्रक्रिया तैयार कर सकें जो सभी ऊंची कार्यक्षमता की जरूरतों को संभालता है और बाकी को कम से कम विशेषाधिकार प्राप्त उपयोगकर्ता स्थान छोड़ देता है। विस्टा अल्फा था क्योंकि यह बंद कर दिया गया और। यह एक दर्द है, लेकिन माइक्रोसॉफ्ट आपको सुरक्षा कारणों से काम करने के लिए पसंद करेंगे।

वैसे, शेलएक्सएक कॉल काम नहीं करेगा यदि आप अपने ऐप को एक सुरक्षित स्थान से प्रोग्राम फाइल डायरेक्टरी जैसे आदि से लॉन्च कर रहे हैं। यह कोशिश की गई कि साल पहले सर्विस मॉडल को स्थानांतरित करने से पहले।

इसलिए आपकी प्रक्रिया लॉन्च करने के लिए और पास यूएसी द्वारा, ऐसा करने का एकमात्र तरीका है एक ऐसी प्रक्रिया से लॉन्च करना जो पहले से ही सुरक्षा के लिए विशेषाधिकार प्राप्त है