2010-12-24 5 views
5

मेरे पास मेरे ऐप में एक अपडेट फ़ंक्शन है - यह इंस्टॉलर को डाउनलोड और सत्यापित करता है (एनएसआईएस के साथ बनाया गया setup.exe)।QProcess :: प्रारंभ करें यूएसी द्वारा अवरुद्ध (एक अद्यतनकर्ता चला रहा है)

QString path = .. absolute path to the downloaded file ... 
QProcess::startDetached(path, QStringList()); 

यह XP पर ठीक काम करता है - लेकिन विस्टा और Win7 पर, कुछ भी नहीं एक बार डाउनलोड पूरा होता है: वास्तव में अद्यतन शुरू करने के लिए, मैं बस कर रहे हैं। अगर मैं डाउनलोड किए गए अपडेट पर ब्राउज़ करता हूं और इसे मैन्युअल रूप से चलाता हूं, तो यह ठीक काम करता है। मुझे लगता है कि क्या हो रहा है यह है कि यूएसी CreateProcess समय पर इंस्टॉलर को अवरुद्ध कर रहा है, लेकिन यह वह जगह है जहां मेरा ज्ञान समाप्त हो जाता है।

अतिरिक्त जटिलता - जब मैं कमांड लाइन से डीबग बिल्ड चला रहा हूं, ऊपर दिए गए चरणों - मुझे यूएसी प्रॉम्प्ट मिलता है और इंस्टॉलर चला सकता है। यह रिलीज बनाता है, प्रारंभ मेनू/शॉर्टकट का निर्माण शुरू किया, जिसमें समस्या है - मुझे लगता है कि कमांड शैल से चलते समय ऑथ टोकन में कोई अंतर है।

उत्तर

3

यदि आप व्यवस्थापक नहीं हैं और आप "Vista" मेनिफेस्ट के साथ .exe पर CreateProcess() को कॉल करते हैं (या कोई मैनिफेस्ट नहीं है, लेकिन एक .exe है कि विंडोज़ इंस्टॉलर के रूप में पहचानती है (इसमें एनएसआईएस शामिल है)) कॉल विफल हो जाती है, आपको ShellExecute[Ex]() का उपयोग करने की आवश्यकता है। ShellExecute ट्रिगर किया जाएगा यूएसी संकेत यदि आवश्यक ...

1

यह एक क्यूटी बग प्रतीत हो रहा है, QTBUG-9761 देखते हैं, सही वैकल्पिक हल runas को lpOperation सेट के साथ ShellExecute उपयोग करने के लिए है।

+0

runas क्रिया का प्रयोग यूएसी ऊंचाई _force_ जाएगा, यदि आप एक क्रिया निर्दिष्ट नहीं करते , ShellExecute इसे अपने आप पर समझ जाएगा ... – Anders

+0

सही, अतिरिक्त जानकारी के लिए धन्यवाद। – ismail

7

तुम भी उपयोग करें

QDesktopServices::openUrl(QUrl::fromLocalFile(path)); 

आश्चर्य की बात और counterintuitive हो सकता है सकते हैं, लेकिन यह काम करता है और मंच पार अधिक है

+0

बहुत बढ़िया समाधान। यह वास्तव में पृष्ठभूमि में ShellExecute कहते हैं। एकमात्र समस्या जो मैं देखता हूं वह यह है कि यह यूएसी विंडो को शीर्ष पर नहीं लाती है –

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